查询 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 获取订单和订单详细信息。但我希望能够获取产品的名称,以便展示它。
我要查询什么 运行 或定义我的关系的更好方法?
$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');
}
玩弄 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 获取订单和订单详细信息。但我希望能够获取产品的名称,以便展示它。
我要查询什么 运行 或定义我的关系的更好方法?
$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');
}