Уровень 5.6: Как отобразить каждый продукт и доступные бренды в таблице, учитывая, что каждый продукт имеет несколько брендов - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в laravel и пытаюсь разработать приложение, в котором есть раздел с таблицей, в которой перечислены все товары, доступные бренды, доступные количества, цены продажи. Каждый продукт имеет несколько брендов

У меня есть три таблицы:

1-я ТАБЛИЦА Items_master: в этой таблице хранятся названия продуктов, цена покупки и продажи

2-я ТАБЛИЦА Stock_quantities: в этой таблице хранится продуктколичество в соответствии с магазином по product_id и shop_id.

3-я ТАБЛИЦА item_brands: в этой таблице хранятся торговые марки каждого продукта на основе product_id и shop_id.

Вот код

ОСНОВНЫЕ ЗАПРОСЫ ДЛЯ ПОЛУЧЕНИЯ НАЗВАНИЯ ПРОДУКТА, КАТЕГОРИЙ И КОЛИЧЕСТВА ИЗДЕЛИЯ

 $details=items_master::select('items_masters.id as 
   product_id','items_masters.name as item_name','items_masters.category','buying_price','selling_price','item_quantities.product_id','item_quantities.quantity','categories.id','categories.serial')       
 ->join('item_quantities','items_masters.id','=','item_quantities.item_id')
  ->join('categories','categories.id','=','items_masters.category')
   ->where([['item_quantities.shop_id', '=',$shop]] )
  ->groupBY('product_id')
   ->get();

ЗАПРОСЫ ПОЛУЧЕНИЯ ИДЕНТИФИКАТОРОВ ПРОДУКТА

    $product_ids = collect($details)->pluck('product_id');

ЗАПРОС ПОЛУЧЕНИЯ БРЕНДОВ ПРОДУКТА

   $brands = item_brands::whereIn('pid', $product_ids)
   ->where('shop_id', $shop)
   ->where('status', 0)
   ->get();

КОД В ПОИСКЕ

   <div class="table-responsive">      
   <table class="table table-bordered table-striped" >
             <thead>
              <tr>

            <th>Item Name</th>
            <th>Item Brands</th>
           <th>Stock Qty</th>
           <th>Category</th>
            <th>Price</th>


              <th>Delete</th>
            </tr>
          </thead>
        <tbody>
          @foreach($details as $detail)
          <tr>
            <td>{{$detail->item_name}} </td>
            <td><div class="form-group">


        @foreach($brands as $brand )

             <span>{{$brand->name}}</span>
         @endforeach


          </div>
         </td>
            <td>{{$detail->quantity.' '.$detail->units}} </td>
            <td >

            <td>{{$detail->category}} </td>
            <td >
            <b>Ksh. {{$detail->selling_price}}</b>

                          </td>
               </tr>
                       @endforeach
            </tbody>
          </table>

Учитывая приведенный выше код, я получаю все бренды для всех продуктов в таблице, указанные для каждого продукта.Мне нужно, чтобы каждый продукт отображал только свои бренды в своем ряду, например

Продукт: Планшет |Марки: Samsung, яблоко

Продукт: Рабочий стол |Бренды: HP, Lenovo

ТОЛЬКО ЭТО ТО, ЧТО ЯВЛЯЕТСЯ

Продукт: Планшет |Бренды: Samsung, Apple, HP, Lenovo

Продукт: Рабочий стол |Бренды: Samsung, Apple, HP, Lenovo

1 Ответ

0 голосов
/ 08 февраля 2019

Вы пытались использовать метод сбора, чтобы ограничить, какие бренды используются в foreach?IE:

@foreach($brands->where('pid', $detail->product_id) as $brand )
    <span>{{$brand->name}}</span>
@endforeach

Поскольку вы получаете все бренды для каждого продукта, это позволит вам просто выбрать бренды для вашего текущего $detail.

Редактировать: но, честно говоря, я чувствуюКак все 3 запроса могут быть записаны в 1 красноречивый запрос, но я должен был бы видеть все 3 модели с отношениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...