查询 eloquent 多列关系

Query eloquent relationship with more than one column

玩弄 laravel 的 eloquent 关系。 我有这些关系。

订单:

id
id_customer

Order.php

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

订单详情

id
order_id
product_id
quantity

OrderDetail 模型

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

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

产品

编号 姓名 价格<br>

dd时 dd($this->order->with('orderDetails')->get();

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

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

使用nested eager loading:

$this->order->with('orderDetails', 'orderDetails.product')->get();

关系应该是 belongsTo(),而不是 hasMany():

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

此外,您可以在此处使用多对多关系。但前提是合适。

仅供访问此问题的每个人作为参考,因为您要求关系建议,这是我可能实现的方法和我的意见。

其实产品属于很多订单,订单属于很多产品。我看到订单详细信息是一个关键点。如果需要,您也可以为此创建一个模型。

products table

id
customer_id

Product.php

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

orders table

id
name
price

Order.php

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

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

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');
}