玩弄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获取订单和订单详细信息。但我希望能够获得产品的名称,以便我可以显示它。
我运行什么查询或更好地定义我的关系?
答案 0 :(得分:3)
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');
}