如何从多对多关系的附加表中获取数据?

时间:2019-12-09 11:47:26

标签: laravel eloquent relationship

我在表“产品”和“食谱”之间有很多联系。我创建了表product_recipe来处理此问题,我的表如下所示:

id | recipe_id | product_id |金额

在刀片文件中,我使用

@foreach($recipe->product as $row)
        <p>{{ $row->name }}</p>
@endforeach

在配方中获取二手产品的名称。如何获得一定数量的产品存储在product_recipe表中?我是否必须为product_recipe表创建模型并从模型中获取它?

2 个答案:

答案 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