多对多关联中如何获取中间表数据?是否需创建中间表模型?
解决多对多关联获取中间表amount字段的问题
嘿,这个问题我熟,Laravel的多对多关联里获取中间表字段其实很简单,而且完全不需要单独创建product_recipe对应的模型,用框架自带的机制就能搞定,一步步来:
1. 确保模型关联定义正确
首先要在你的Recipe模型里,给products关联方法加上withPivot(),指定要从中间表携带的amount字段:
// app/Models/Recipe.php public function products() { return $this->belongsToMany(Product::class, 'product_recipe') ->withPivot('amount'); // 告诉Laravel要带上中间表的amount字段 }
(注:你原来Blade里写的$recipe->product应该是笔误,关联方法是复数products,要对应上)
2. 在Blade模板中直接访问pivot属性
修改你的循环代码,通过关联模型的pivot属性就能拿到中间表的amount字段了:
@foreach($recipe->products as $product) <p>{{ $product->name }} - 用量:{{ $product->pivot->amount }}</p> @endforeach
额外说明
如果只是读取中间表字段,上面的方法完全够用。要是以后你需要对中间表做更复杂的操作(比如批量修改、自定义逻辑),才需要创建ProductRecipe模型,并用using()方法关联到多对多关系里,但目前的场景完全没必要。
内容的提问来源于stack exchange,提问作者Jaroslaw Nowak
相关产品推荐
相关产品推荐

