I have few products in 3 category (for example), and each product has a brand. I want to show brands which related to products in a specific category.
Models:
–product
–brand
–category
relations:
category has many products
brand has many products
How can I do that?
Advertisement
Answer
Considering you have 3 models with relationships like :
Brand
Model :
JavaScript
x
public function products()
{
return $this->hasMany(Product::class);
}
Product
Model :
JavaScript
public function brand()
{
return $this->belongsTo(Brand::class);
}
public function category()
{
return $this->belongsTo(Category::class);
}
Category
Model :
JavaScript
public function products()
{
return $this->hasMany(Product::class);
}
You can use whereHas
:
JavaScript
$brands = Brand::whereHas('products.category', function ($q){
return $q->where('name', 'category_name');
})->get();
Above will give you all brands which has product belonging to category with name as category_name
.
If you want to get product and category details then you can eager load :
JavaScript
$brands = Brand::whereHas('products.category', function ($q){
return $q->where('name', 'category_name');
})->with(['products', 'products.category'])->get();