Как отображать данные с контроллера на блейд в laravel?

У меня есть этот запрос в контроллере, который выводит данные, как я хочу. Я хотел бы отобразить общее количество в представлении. Прямо сейчас он показывает сумму первого заказа для всех заказов. например, если общая сумма первого заказа составляет 56 долларов, все заказы будут стоить 56 долларов. Как я могу показать общую сумму каждого заказа?

Так выглядит контроллер

public function viewOrders(User $user)
{
//$seller = Auth::user();
$totals = OrderProduct::select("seller_id", DB::Raw("SUM(Subtotal) AS total"), 'order_id')
->where('seller_id', '=',  \Auth::user()->id)
->groupBy('seller_id')
->groupBy('order_id')
->get();

//dd($totals);


$orders = Order::whereHas('orderItems.product', function ($query) {
    $query->where('seller_id', '=',  \Auth::user()->id);
})->get();

//dd($orders);
return view('orders', ['orders'=> $orders, 'total'=> $totals] );
}

когда я dd($totals) я получаю

Collection {#278 ▼
#items: array:4 [▼
0 => OrderProduct {#302 ▶}
1 => OrderProduct {#303 ▶}
2 => OrderProduct {#304 ▼
  #table: "order_product"
  #fillable: array:6 [▶]
  #connection: "mysql"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  #with: []
  #withCount: []
  #perPage: 15
  +exists: true
  +wasRecentlyCreated: false
  #attributes: array:3 [▶]
  #original: array:3 [▼
    "seller_id" => 1
    "total" => "56"------------------->I would like to show this
    "order_id" => 35
  ]
  #changes: []
}
3 => OrderProduct {#305 ▼
  #table: "order_product"
  #fillable: array:6 [▶
  #attributes: array:3 [▶]
  #original: array:3 [▼
    "seller_id" => 1
    "total" => "112"------------------->I would like to show this
    "order_id" => 36
  ]
  #changes: []
  #casts: []
}
]
}

Вид отвала

@foreach ($order->orderItems as $item)
@if ($item->product->user_id == Auth::user()->id)

   <td>{{ $item->product->name }}</td>
   <td>{{ $item->product->price }}</td>

 @endif
 @endforeach

@foreach($total as $item)
 <td>Total: {{$item->total }}</td>
@endforeach
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
1 053
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш второй цикл foreach, вероятно, является проблемой. Вы находитесь в таблице HTML. Для каждого ряд вы перебираете orderItems, чтобы получить <td>s для продукта, цены и т. д. Похоже, у вас есть один столбец, настроенный для поля Всего для этого элемента.

Таким образом, вы, скорее всего, сможете записать сумму только одного элемента, поскольку в таблице больше нет места, чтобы добавить больше <td>s. Чтобы убедиться, что это проблема, вы можете попытаться поместить итоги в один <td> с каналом между ними в качестве теста. Это будет внутри в первом цикле:

<td>
  @foreach($total as $item)
     {{$item->total }}
     {{ $loop->last?"":" | " }}
  @endforeach
</td>

Если это так, вы можете изменить архитектуру для трехмерного Всего для каждого элемента — возможно, как в тесте выше, или, возможно, для одной суммы итоги для каждого продукта и т. д. Что-то, чтобы одна строка могла содержать один <td> для всего (ов).

Я попробовал то, что вы предложили, и я получил 56 | 56 | 56 | 112 в качестве результата в каждом заказе @Watercayman

joh 07.07.2019 23:10

Отлично, тогда вы знаете, что это правильное решение. Отсюда вы можете решить, хотите ли вы суммировать итоги, усреднять их и т. д. Но это показало, что проблема такая, как описано. Или... вы можете переосмыслить способ подведения итогов - может быть, вы захотите переместить их в модель OrderProduct как отношение/вычисление/и т. д., чтобы убедиться, что они напрямую совпадают с нужным продуктом.

Watercayman 07.07.2019 23:11

Мой вопрос заключался в том, что я хотел отобразить каждый заказ с его общей суммой, скажем, первый заказ с общей суммой 56, второй заказ с общей суммой 56 и так далее, я не хотел отображать все суммы сразу для каждого заказа @Watercayman

joh 07.07.2019 23:16

Вам нужно было сначала решить первую проблему с перезаписью <td>. Теперь, когда это решено, все просто — у вас есть выбор, как я уже сказал. Чтобы получить общую сумму заказа для продукта, просто выберите по order_id. Полностью удалите цикл @foreach и выберите сумму для этого заказа. Что-то вроде: $total->where('order_id', $item->id)->first()->total

Watercayman 07.07.2019 23:21

Извините, я не понял, куда мне положить $total->where('order_id', $item->id)->first()->total @Watercayman

joh 07.07.2019 23:26

Внутри исходного цикла foreach полностью пропустите второй цикл - это была проблема, когда он давал вам несколько итогов. Итак, мы просто хотим получить общую сумму Один, как вы просили, которая соответствует правильному порядку. Итак, в верхнем цикле, прямо под ценой, добавьте <td> вокруг этого кода, и он должен дать вам то, что вы хотите. Я предполагаю, что item->id - это идентификатор заказа.

Watercayman 07.07.2019 23:29

Выдает ошибку Trying to get property of non-object когда ставлю $total->where('order_id', $item->id)->first()->total @Watercayman

joh 07.07.2019 23:36

Я предполагал, что item->id был идентификатором заказа. Похоже, у вас есть второй объект посередине. order->orderItem. У вас есть Всего, привязанный к номер заказа, который будет одинаковым для каждого ордера в цикле. Вы застряли здесь, если не можете связать итог с заказЭлемент, а не с заказ. Другими словами, вы можете показать общую сумму для каждого заказ, а не для элемента заказа. Ваш вопрос задан по заказу, но вы зацикливаетесь на другом объекте, orderitem, который не будет работать на основе отношения (order_id) в сумме.

Watercayman 07.07.2019 23:41

Как я могу показать его для каждого заказа, помогите, пожалуйста. Если вам нужен больше кода, я могу дать @ Watercayman

joh 07.07.2019 23:49

Вы мощь сможете сделать это, если у вас есть order_id на orderItem объекте. Если да, то это свяжет все три объекта вместе. Если это так, вы можете попробовать тот же код, что и выше, вот так: <td>{{$total->where('order_id', $item->order_id)->first()->total}}</td> Не слишком углубляясь в ваш код, это будет лучше всего, если эта ссылка есть. Попробуйте.

Watercayman 07.07.2019 23:54

Долгий путь, но получилось! :)

Watercayman 08.07.2019 00:03

Другие вопросы по теме