#php #mysql #laravel
#php #mysql #laravel
Вопрос:
Я работаю над Laravel with MySQL
веб-сайтом, похожим на электронную коммерцию, и мне нужно показать все товары по категориям по поставщику / магазину.
Я попробовал приведенный ниже код, но он повторяет каждый продукт, он не группируется по одной категории, если продукты принадлежат к одной категории.
Controller:
$products = Product::with('category')->where('store_id',$id)->get();
View:
@foreach($products as $product)
{{ $product->category->name }}
{{ $product->name }}
@endforeach
Database Structure:
store
id | name
---
products - store_id is foreign key of store table and category_id is foreign key of categories table
id | store_id | category_id | name
---
categories
id | name
Результат, который я ожидаю:
Категория первая
all products under this category
Категория вторая
all products under this category
Ответ №1:
Попробуйте получить категории и с нетерпением загружайте свои товары с определенным идентификатором магазина
$categories = Category::with('products'=> function($query) use ($id) {
$query->where('store_id' , $id);
}])
->whereHas('products', function ($query) use ($id) {
$query->where('store_id' ,$id);
})
->get();
И в представлении сначала зацикливаются ваши категории, а затем связанные товары
@foreach($categories as $category)
{{ $category->name }}
@foreach($category->products as $product)
{{ $product->name }}
@endforeach
@endforeach
Комментарии:
1. да, М Халид, я сделал это точно в представлении до того, как увидел ваш обновленный ответ, чувак, большое тебе спасибо. Запрос абсолютно правильный, и это то, что я ищу. Действительно большая помощь для меня.
2. о. Я вижу, вы добавили эту строку Category::with(‘products’=> function($query) use ($id) { $query-> где(‘store_id’ , $id); }])
3. У меня проблема. товары из одной категории отображаются, даже если в магазине ее нет.
4. @KonjeshEsbrading Это невозможно, так как вы можете видеть, что я использовал фильтр хранилища в предложении where, а также в предложении eager loaded production, т.е.
with()
5. $categories = Категория::with([‘products’=> функция ($query) use ($id) { $query-> where(‘store_id’ , $id); }]) вот оно, спасибо, Халид Джунаид