我在表“产品”和“食谱”之间有很多联系。我创建了表product_recipe来处理此问题,我的表如下所示:
id | recipe_id | product_id |金额
在刀片文件中,我使用
@foreach($recipe->product as $row)
<p>{{ $row->name }}</p>
@endforeach
在配方中获取二手产品的名称。如何获得一定数量的产品存储在product_recipe表中?我是否必须为product_recipe表创建模型并从模型中获取它?
答案 0 :(得分:2)
您必须使用pivot
属性。
@foreach($recipe->product as $row)
<p>{{ $row->pivot->field_name}}</p>
@endforeach
无需为product_recipe
创建模型。只需指定两个模型之间的表名即可。
与return $this->belongsToMany('App\Product', 'product_recipe')->withPivot('amount');
类似,其他型号类似。
答案 1 :(得分:2)
您将必须声明该关系要包含额外的数据透视信息,以便附加到记录的数据透视对象将不仅仅是“ id”:
public function products()
{
return $this->belongsToMany(Product::class)->withPivot('amount');
}
现在pivot
对象将包含字段amount
:
foreach ($recipe->products as $product) {
echo $product->pivot->amount;
}
“默认情况下,
pivot
对象上仅存在模型键。如果数据透视表包含额外的属性,则在定义关系时必须指定它们”
Laravel 6.x Docs - Eloquent Relationships - Many To Many - Retrieving Intermediate Table Columns withPivot