Laravel и данные в отношения?

Доброй ночи! У меня есть следующая задача.
На фронт, нужно вывести таблицу с тремя уровнями вложенности

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();


Большое спасибо за любую помощь!
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
@vism
В коде здорово человек такое не просходить
@foreach ($client->relatedOrders as $order)
            @foreach ($order->relatedProducts as $product)
                @php($a[] = $product->qty*$product->relatedPenalty->price)
            @endforeach
        @endforeach
в представлении
Это хотя бы надо делать в сервисе/модели отдельным методом и споконо выводить.
$client->getTotalOrdersProductsPenaltyPrice()

И именно getTotalOrdersProductsPenaltyPrice, а то потом хрен разберешься в вашем коде.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@DmitrSha
наверное $a для каждого клиента при выводе обнулять
ну или хотя бы расскажите какие неправильные значения и чего становятся
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы