簡體   English   中英

Laravel 與多個表的關系與 pivot

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM