【问题标题】:get data from a model that is relationed through a child table laravel eloquent从通过子表 laravel eloquent 关联的模型中获取数据
【发布时间】:2021-03-08 23:01:56
【问题描述】:

所以我有一张表Order 一个订单可能有很多Order_details 但每个订单详细信息只属于一个订单。我有另一个名为Professionals 的表,每个订单明细可能有很多专业人士,专业人士可能有很多order_details,所以我有一个数据透视表order_detail_professional

|Orders|  |order_details| |order_detail_professional| |professionals|
-------  --------------    -------------------------  ---------------
| id  |  |     id     |   |    order_detail_id      | |    id       |
          ------------    |    professional_id      |
         |  order_id  |

如您所见,professionalsorders 相关,但没有直接关系,所以我不知道如何从特定专业人士那里获得订单。

这是关系

Order.php
    public function order_details()
    {
        return $this->hasMany(OrderDetail::class);
    }
OrderDetail.php
    public function order()
    {
        return $this->belongsTo(Order::class);
    }

     public function professionals()
    {
        return $this->belongsToMany(Professional::class);
    }
Professionals.php
     public function order_details()
    {
        return $this->belongsToMany(OrderDetail::class);
    }

关于如何从特定的Professional 获取Orders 的任何提示?

【问题讨论】:

  • 您的意思是如何从头开始构建查询,或者在变量中已有Professional 模型?
  • @AugustoMoura 我只需要构建一个雄辩的查询来获取与特定专业人士相关的Orders 信息(例如记录一个),不管它是用一种方式还是另一种方式都没有关系

标签: laravel eloquent


【解决方案1】:

链接whereHas:

$orders = Order::whereHas('order_details', function($orderDetails) use($professionalId){
   $orderDetails->whereHas('professionals', function($professionals) use($professionalId){
      $professionals->where('professionals.id', $professionalId);
   });
})->get();

使用嵌套预加载然后映射(在本例中,使用高阶消息):

$orders = Professionals::with('order_details.order')->find($professionalId)
   ->map->getRelationValue('order');

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 2018-10-19
    • 2017-01-12
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    相关资源
    最近更新 更多