как получить отчет о продажах товаров по заказу за последний месяц в laravel?

#php #mysql #laravel #eloquent #laravel-query-builder

Вопрос:

Я пытаюсь получить отчет о товарах заказа за последний месяц. Вот моя структура таблицы

 orders
    id - integer
    amount- double

order_items (pivot table)
    id - integer
    order_id - foreign
    item_id - foreign
    quantity
    price
 

Вот моя Item модель

 public function orders()
{
    return $this->belongsToMany(Order::class, 'order_items', 'item_id',  'order_id')
                ->withPivot('quantity', 'price');
}
 

Вот моя Order модель

 public function items()
{
    return $this->belongsToMany(Item::class, 'order_items', 'order_id', 'item_id')
                ->withPivot('quantity', 'price')
                ->withTimestamps();
}
 

Вот мой контроллер, где я получил все заказы за прошлый месяц

 $orders = Order::with('items')
               ->whereMonth('created_at', '=', Carbon::now()->subMonth()->month)
               ->get();
 

После каждой петли в лезвии,

 @foreach ($orders as $order)
  <ul>
    @foreach($order->items as $item)
      <li>
        {{ $item->name }}, {{ $item->pivot->quantity }}, {{ $item->pivot->price }}
      </li>
    @endforeach
  </ul>
  <hr>
@endforeach
 

Я получаю такие данные

 Item Name  Quantity Price
Item A         20    600
Item A          5    100
Item A          7    200
Item B          2     20
Item B          8     100
Item C        100    1000
 

Но я не хочу показывать один и тот же элемент в этой строке, я хочу показать вот так

 Item Name  Quantity Price
Item A         32    900
Item B         10    120
Item C        100    1000
 

Как суммировать количество и цену, если товар один и тот же?

Ответ №1:

информация order_items представляет собой сводную таблицу. Вам просто нужно просмотреть свои заказы, а затем элементы каждого заказа.

 @foreach ($orders as $order)
  <p>{{ $order->id }}, {{ $order->amount }}</p>
  <ul>
    @foreach($order->items as $item)
      <li>
        {{ $item->name }}, {{ $item->pivot->quantity }}, {{ $item->pivot->price }}
      </li>
    @endforeach
  </ul>
  <hr>
@endforeach
 

Комментарии:

1. Таким образом, элемент будет повторен, но я хочу, чтобы элемент был уникальным . Если в заказе 1 есть товар А, а в заказе 2 также есть товар А, то я хочу показать товар А только один раз, а количество и цена будут суммироваться со старым.