查询与多个列的雄辩关系

时间:2017-01-04 17:02:58

标签: php laravel laravel-eloquent

玩弄laravel雄辩的关系。 我有这些关系。

订单:

id
id_customer

Order.php

public function orderDetails(){
    return $this->hasMany('App\OrderDetail', 'order_id');
}

的OrderDetail

id
order_id
product_id
quantity

OrderDetail Model

 public function product()
{
   return $this->hasMany('App\Product', 'id', 'id');
}

public function order(){
  return $this->belongsTo('App\Order', 'order_id', 'id');
}

产品

id name price

当dd'ed     DD($这 - >命令 - >在( 'ORDERDETAILS') - >得到();

我可以通过订单详细信息中包含的产品ID获取订单和订单详细信息。但我希望能够获得产品的名称,以便我可以显示它。

我运行什么查询或更好地定义我的关系?

2 个答案:

答案 0 :(得分:3)

使用nested eager loading

belongsTo()

关系应该是hasMany(),而不是public function product() { return $this->belongsTo('App\Product', 'product_id', 'id'); }

{{1}}

此外,您可以在此处使用多对多关系。但只有它适合。

答案 1 :(得分:2)

仅供参观此问题的所有人参考,因为您已经要求提供关系建议,这是我可以实现这一点和我的意见的方式。

它的实际产品属于许多订单,订单属于很多产品。我看到订单细节是一个支点。如果你愿意,你也可以为它创建一个模型。

products

id
customer_id

Product.php

public function orders()
{
    return $this->belongsToMany(Order::class, 'order_details', 'order_id', 'product_id')->withPivot('quantity');
}

orders

id
name
price

Order.php

public function products()
{
    return $this->belongsToMany(Product::class, 'order_details', 'product_id', 'order_id')->withPivot('quantity');
}

我可能不会创建OrderDetail,因为没有对该表的可靠引用。 只是order_details

id
order_id
product_id
quantity

但如果我要创建OrderDetail模型,那么它将是如何

public function products()
{
    return $this->hasMany(Product::class, 'product_id');
}

public function orders()
{
    return $this->hasMany(Order::class, 'order_id');
}