У меня есть этот запрос в контроллере, который выводит данные, как я хочу. Я хотел бы отобразить общее количество в представлении. Прямо сейчас он показывает сумму первого заказа для всех заказов. например, если общая сумма первого заказа составляет 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






Ваш второй цикл foreach, вероятно, является проблемой. Вы находитесь в таблице HTML. Для каждого ряд вы перебираете orderItems, чтобы получить <td>s для продукта, цены и т. д. Похоже, у вас есть один столбец, настроенный для поля Всего для этого элемента.
Таким образом, вы, скорее всего, сможете записать сумму только одного элемента, поскольку в таблице больше нет места, чтобы добавить больше <td>s. Чтобы убедиться, что это проблема, вы можете попытаться поместить итоги в один <td> с каналом между ними в качестве теста. Это будет внутри в первом цикле:
<td>
@foreach($total as $item)
{{$item->total }}
{{ $loop->last?"":" | " }}
@endforeach
</td>
Если это так, вы можете изменить архитектуру для трехмерного Всего для каждого элемента — возможно, как в тесте выше, или, возможно, для одной суммы итоги для каждого продукта и т. д. Что-то, чтобы одна строка могла содержать один <td> для всего (ов).
Отлично, тогда вы знаете, что это правильное решение. Отсюда вы можете решить, хотите ли вы суммировать итоги, усреднять их и т. д. Но это показало, что проблема такая, как описано. Или... вы можете переосмыслить способ подведения итогов - может быть, вы захотите переместить их в модель OrderProduct как отношение/вычисление/и т. д., чтобы убедиться, что они напрямую совпадают с нужным продуктом.
Мой вопрос заключался в том, что я хотел отобразить каждый заказ с его общей суммой, скажем, первый заказ с общей суммой 56, второй заказ с общей суммой 56 и так далее, я не хотел отображать все суммы сразу для каждого заказа @Watercayman
Вам нужно было сначала решить первую проблему с перезаписью <td>. Теперь, когда это решено, все просто — у вас есть выбор, как я уже сказал. Чтобы получить общую сумму заказа для продукта, просто выберите по order_id. Полностью удалите цикл @foreach и выберите сумму для этого заказа. Что-то вроде: $total->where('order_id', $item->id)->first()->total
Извините, я не понял, куда мне положить $total->where('order_id', $item->id)->first()->total @Watercayman
Внутри исходного цикла foreach полностью пропустите второй цикл - это была проблема, когда он давал вам несколько итогов. Итак, мы просто хотим получить общую сумму Один, как вы просили, которая соответствует правильному порядку. Итак, в верхнем цикле, прямо под ценой, добавьте <td> вокруг этого кода, и он должен дать вам то, что вы хотите. Я предполагаю, что item->id - это идентификатор заказа.
Выдает ошибку Trying to get property of non-object когда ставлю $total->where('order_id', $item->id)->first()->total @Watercayman
Я предполагал, что item->id был идентификатором заказа. Похоже, у вас есть второй объект посередине. order->orderItem. У вас есть Всего, привязанный к номер заказа, который будет одинаковым для каждого ордера в цикле. Вы застряли здесь, если не можете связать итог с заказЭлемент, а не с заказ. Другими словами, вы можете показать общую сумму для каждого заказ, а не для элемента заказа. Ваш вопрос задан по заказу, но вы зацикливаетесь на другом объекте, orderitem, который не будет работать на основе отношения (order_id) в сумме.
Как я могу показать его для каждого заказа, помогите, пожалуйста. Если вам нужен больше кода, я могу дать @ Watercayman
Вы мощь сможете сделать это, если у вас есть order_id на orderItem объекте. Если да, то это свяжет все три объекта вместе. Если это так, вы можете попробовать тот же код, что и выше, вот так: <td>{{$total->where('order_id', $item->order_id)->first()->total}}</td> Не слишком углубляясь в ваш код, это будет лучше всего, если эта ссылка есть. Попробуйте.
Долгий путь, но получилось! :)
Я попробовал то, что вы предложили, и я получил
56 | 56 | 56 | 112в качестве результата в каждом заказе @Watercayman