Laravel 5.4: идентификатор группы и подсчитать количество каждого продукта - PullRequest
0 голосов
/ 30 апреля 2018

У меня запрос на фильтрацию выглядит следующим образом.

public function index( Request $request ) {
        $dateFrom = $request->get( 'dateFrom' );
        $dateTo   = $request->get( 'dateTo' );
        $status   = $request->get( 'orderState' );

        $orders = ( new OrderList() )
            ->whereHas( 'orderDetail', function ( $query ) {
                $query->where( 'supplier_id', Auth::guard( 'supplier' )->user()->id );
            } )
            ->with( 'deliveryList' )
            ->with( 'orderDetail' )
            ->when( $dateFrom, function ( $query ) use ( $dateFrom, $dateTo ) {
                $query->whereBetween( 'created_at', [ $dateFrom, $dateTo ] );
            } )
            ->when( $status, function ( $query ) use ( $status ) {
                $query->where( 'order_state_id', $status )->get();
            } )->get();

        $productList = $orders->orderDetail;
        dd( $productList );
        //Order Status
        $orderStates = OrderState::listsTranslations( 'states' )->pluck( 'states', 'id' )->toArray();


        return view( 'supplierComponents.order_list', compact( 'orders', 'orderStates' ) );
    }

теперь этот запрос выведет список заказов с деталями заказов. мне нужно сгруппировать товары в каждом заказе и получить количество

последний вид должен выглядеть примерно так

product name           quantity
-------------------------------
Tea                      5
-------------------------------
juice                    3
-------------------------------

Мои модели OrderLst

public function orderDetail() {
        return $this->hasMany( OrderDetail::class, 'order_id' );
    }

Обновление думал, что я никогда не получу правильный путь от controller, и я не думал о том, чтобы попытаться получить его прямо в лезвие

Итак, то, что я сделал, смещено на лезвие, пытающееся сделать это там.

Вот что я сделал

@foreach($orders as $order)
    @foreach($order->orderDetail as $items)
       <tr>
         <td>{!! $items->quantity !!}</td>
         <td>{!! $items->product_name !!}</td>
       </tr>
    @endforeach
@endforeach

Теперь я получаю все перечисленные продукты по мере необходимости, но попробуйте Group их вот так

@foreach($orders as $order)
      @foreach($order->orderDetail->groupBy('product_id') as $items)
          <tr>
            <td>{!! $items->quantity !!}</td>
            <td>{!! $items->product_name !!}</td>
          </tr>
      @endforeach
@endforeach

Получено: Свойство [количество] не существует в этом экземпляре коллекции.

1 Ответ

0 голосов
/ 30 апреля 2018
$orders = ( new OrderList() )
        ->whereHas( 'orderDetail', function ( $query ) {
            $query->where( 'supplier_id', Auth::guard( 'supplier' )->user()->id );
        } )
        ->with( 'deliveryList' )
        ->with(['orderDetail' => function ($query) {
                $query->select(DB::raw('*, sum(quantity) as quantity_sum'))->groupBy('product_id')->get();
            }])
        ->when( $dateFrom, function ( $query ) use ( $dateFrom, $dateTo ) {
            $query->whereBetween( 'created_at', [ $dateFrom, $dateTo ] );
        } )
        ->when( $status, function ( $query ) use ( $status ) {
            $query->where( 'order_state_id', $status )->get();
        } )->get();

Непроверенные.

...