#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 также есть товар А, то я хочу показать товар А только один раз, а количество и цена будут суммироваться со старым.