Запрос отношений Laravel для загрузки hasMany принадлежит многим

#php #mysql #laravel #eloquent #laravel-relations

Вопрос:

Мне нужно получить brands данные на определенной collection странице, но их больше 1 product .

Вот отношения между моделями.

 Brand -> HasMany -> Product

Product <= BelongsToMany => Collection

 

Мне удалось получить данные о брендах, в которых более 1 товара для всех коллекций, следующим образом:

 $brands = Brand::has("products")->get(); //this will return all brands that have more than 1 product.
 

Теперь мне нужно добавить ограничение на сбор здесь.

Я могу получить коллекцию с $slug определенной страницы.

 $collection = Collection::where("slug", $slug)->first();
 

Может кто-нибудь, пожалуйста, помочь мне, как получить бренды для конкретной страницы коллекции?

Ответ №1:

Попробуйте это:

 $brands = Brand::has("products")
->whereHas('products.collections',function($q) use ($slug){ // your relation to product model
  $q->where("slug", $slug);
})
->get();
 

Комментарии:

1. Это здорово! кстати, нет ли какой n 1 -либо проблемы с запросом? например, разве нам не нужно спешить с загрузкой products.collections ?

2. По приведенному выше запросу он соединится с записью продукта и коллекции и отфильтрует в соответствии с критерием, он получит записи или таблицу брендов, и в этом вы сможете получить доступ к записям таблицы продуктов и коллекций