Доброй ночи! У меня есть следующая задача.
На фронт, нужно вывести таблицу с тремя уровнями вложенности
1. Клиент
2. Сумма (Общая сумма всех заказов)
2.1 Номер заказа
2.2 Сумма заказа (Сумма стоимости товаров)
3.1 Наименование
3.2 Цена
3.3 Кол-во
3.4 Сумма
Для это у меня следующая структура базы (Упуская некоторые поля)
Users
1.id
2.name
penalty_orders
1.id
2.user_id
3.order_id
penalty_products
1.id
2.qty
3.product_id
Для начала я делаю выборку с условием
Client::whereHas('relatedOrders')
Тем самым получаю, клиентов у которых таблица penalty_orders не пуста. И вывожу их в представлении, но уже здесь и возникает проблема. Потому, что я должен вывести значения для конкретного пользователя.
@foreach($clients as $client)
Клиент: {{ $client->first_name }} {{ $client->last_name }}
@foreach ($client->relatedOrders as $order)
@foreach ($order->relatedProducts as $product)
@php($a[] = $product->qty*$product->relatedPenalty->price)
@endforeach
@endforeach
Сумма: {{ array_sum($a) }}
@endforeach
Этот код выведет мне правильно значение, при условии, что в базе есть всего один пользователь с отношением relatedOrders, если их больше, то значение будет правильно только на первой итерации.
Прошу объяснить, как мне взять значение, котороя по факту находиться внутри отношения, которое в свою очередь являеться отношением. Код запроса выглядит вот так. Дело в том, что я хочу решить все это дело, только одним запросом.
$clients = Client::whereHas('relatedOrders')->with('relatedOrders.relatedProducts.relatedPenalty','relatedOrders.relatedProducts.relatedProduct')->latest()->get();
Большое спасибо за любую помощь!