Я новичок в программировании на Laravel. Моя проблема в том, что когда я добавляю товар в корзину, все товары добавляются успешно, но окончательный общий расчет становится равным 0. Что я пробовал до сих пор, я прикрепил код ниже. Я прикрепил ниже контроллер и просмотрите, можете ли вы проверить и решить мою проблему? Я также приложил фотографию. введите сюда описание изображения
ViewCartController
public function index()
{
$cart = Cart::where('user_id', Auth::id())->with('items.product')->first();
$totalCost = 0;
if ($cart) {
foreach ($cart->items as $item)
{
if (isset($item->total_cost)) { $totalCost += $item->total_cost;
} }
}
return view('pages.cart.view', compact('cart', 'totalCost'));
}
просмотр корзины
<div class = "container">
<h2>Your Cart</h2>
@if (session('success'))
<div class = "alert alert-success">{{ session('success') }}</div>
@endif
@if (session('error'))
<div class = "alert alert-danger">{{ session('error') }}</div>
@endif
@if ($cart && $cart->items->count() > 0)
<div class = "total-cost">
</div>
<table class = "table">
<thead>
<tr>
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
<th>Total</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach ($cart->items as $item)
<tr>
<td>{{ $item->product->productname }}</td>
<td>
<form action = "" method = "POST">
@csrf
@method('PUT')
<input type = "number" name = "qty" value = "{{ $item->qty }}" min = "1">
<button type = "submit" class = "btn btn-primary">Update</button>
</form>
</td>
<td>{{ $item->product->price }}</td>
<td>{{ $item->product->price * $item->qty }}</td>
<td>
<form action = "{{ route('cart.remove', $item->product->id) }}" method = "POST">
@csrf
@method('DELETE')
<button type = "submit" class = "btn btn-danger">Remove</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
<h3>Total Cost: ${{ $totalCost }}</h3>
@else
<p>Your cart is empty.</p>
@endif
</div>
да, сэр, но всего становится 0
Можете ли вы показать корзину и таблицу товаров? у него есть проблема с этим условием. если (isset($item->total_cost)) {$totalCost += $item->total_cost; }
@ user3342634, проверьте data-type, который вы назначили при миграции для столбца total_cost.
@ user3342634, сделайте dd($cart->items), чтобы проверить, есть ли в возвращаемом наборе результатов столбец с именем total_cost. Если все идет правильно, как указано выше, без каких-либо синтаксических ошибок, то должна быть какая-то проблема с $item->total_cost, и он возвращает false, поэтому вы 0 в качестве общей цены.
можете ли вы написать код, пожалуйста, сэр?
@user3342634 user3342634, я опубликовал свой ответ, проверьте, пожалуйста.






Вы можете попробовать этот код вместо существующего кода.
$cart = Cart::where('user_id', Auth::id())->with('items.product')->first();
$totalCost = 0;
if ($cart) {
foreach ($cart->items as $item)
{
$totalCost += ($item->product->price * $item->qty);
}
}
return view('pages.cart.view', compact('cart', 'totalCost'));
Попробуйте приведенный выше код, он обязательно сработает.
Убедитесь, что ваш $cart возвращает ожидаемый результат.
Примечание: — Я включаю все моменты, которые я упомянул в разделе комментариев, но не упомянул здесь.
И если вы хотите знать, что случилось с вашим текущим кодом, сделайте следующее.
public function index()
{
$cart = Cart::where('user_id', Auth::id())->with('items.product')->first();
dd($cart->items);
//$totalCost = 0;
//if ($cart) {
// foreach ($cart->items as $item)
// {
// if (isset($item->total_cost)) {
// $totalCost += $item->total_cost;
// }
// }
//}
//return view('pages.cart.view', compact('cart', 'totalCost'));
}
Закомментируйте существующий код, за исключением первых двух строк, которые покажут вам извлеченное query-result. И затем вы сможете проверить, содержит ли query-result это конкретное поле total_cost.
-> Если вы не нашли total_cost, то логически ваш код работает хорошо, но не так, как вы ожидали.
-> И если вы найдете total_cost, то может возникнуть проблема с data-type, который вы назначили столбцу в своем migration-file, о котором я также упоминал в разделе комментариев.
-> поддерживать хорошо структурированный код, т. е. размещать {} правильно.
Попробуйте это и дайте мне знать.
Вы уверены, что
$item->total_costимеет значениеqty*priceдля каждого товара?