在3个模型之间获取相关记录

时间:2019-02-20 19:23:13

标签: php laravel eloquent

我在3类(例如)中产品很少。每个产品都有一个品牌。

所以我想展示与特定类别产品相关的品牌。

型号:

-产品

-品牌

-类别

关系:

类别有很多产品

品牌有很多产品

请指导我这样做。

非常感谢

1 个答案:

答案 0 :(得分:4)

考虑到您有3种具有如下关系的模型:

Brand型号:

public function products()
{
    return $this->hasMany(Product::class);
}

Product型号:

public function brand()
{
    return $this->belongsTo(Brand::class);
}

public function category()
{
    return $this->belongsTo(Category::class);
}

Category型号:

public function products()
{
    return $this->hasMany(Product::class);
}

您可以使用whereHas

$brands = Brand::whereHas('products.category', function ($q){
     return $q->where('name', 'category_name');
})->get();

以上将为您提供所有产品类别为category_name的品牌。

如果要获取产品和类别的详细信息,则可以急于加载:

$brands = Brand::whereHas('products.category', function ($q){
    return $q->where('name', 'category_name');
})->with(['products', 'products.category'])->get();