[英]Laravel relationship with multiple table with pivot
我有 3 張桌子和 pivot(產品有選項)
-products
-> id
-> name
-> price
-options
-> id
-> name
-> option_group_id
-option_groups
-> id
-> name
-option_products
-> option_id
-> product_id
我得到產品選項
public function options()
{
return $this->belongsToMany(\App\Models\Option::class, 'option_products');
}
但我想從產品 model 中獲取選項組
您可以直接從選項訪問option_groups
屬性。 因此,您不需要另一個關系。 如果您想擁有所有選項組,您可以使用 model 上的另一種方法將它們預先加載到關系上。 如果只需要選項組,則可以將 map 生成的集合放入選項組的集合中。
例子:
public function optionsWithGroups()
{
return $this->options()
->with('group')
->get();
}
// ...or...
public function optionGroups()
{
return $this->options()
->with('group')
->get()
->map(fn($option) => $option->group);
}
這可以通過“嵌套急切加載”來實現。
Products::with('options','options.groups'...)->get();
https://laravel.com/docs/8.x/eloquent-relationships#nested-eager-loading
我認為您想要的是hasManyThrough
關系。 就像是:
public function optionGroups()
{
return $this->hasManyThrough(OptionGroup::class, Option::class);
}
您可能需要顯式設置一些鍵(請參閱鍵約定)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.