#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. По приведенному выше запросу он соединится с записью продукта и коллекции и отфильтрует в соответствии с критерием, он получит записи или таблицу брендов, и в этом вы сможете получить доступ к записям таблицы продуктов и коллекций