поставщик / магазин группирует товары по категориям — laravel

#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); }]) вот оно, спасибо, Халид Джунаид