Итоговая сумма не рассчитывается как 0 с использованием Laravel 11

Я новичок в программировании на 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>

Вы уверены, что $item->total_cost имеет значение qty*price для каждого товара?

Subha 31.05.2024 08:30

да, сэр, но всего становится 0

user3342634 31.05.2024 08:58

Можете ли вы показать корзину и таблицу товаров? у него есть проблема с этим условием. если (isset($item->total_cost)) {$totalCost += $item->total_cost; }

Harpreet 31.05.2024 09:19

@ user3342634, проверьте data-type, который вы назначили при миграции для столбца total_cost.

Subha 31.05.2024 09:26

@ user3342634, сделайте dd($cart->items), чтобы проверить, есть ли в возвращаемом наборе результатов столбец с именем total_cost. Если все идет правильно, как указано выше, без каких-либо синтаксических ошибок, то должна быть какая-то проблема с $item->total_cost, и он возвращает false, поэтому вы 0 в качестве общей цены.

Subha 31.05.2024 09:43

можете ли вы написать код, пожалуйста, сэр?

user3342634 31.05.2024 10:37

@user3342634 user3342634, я опубликовал свой ответ, проверьте, пожалуйста.

Subha 31.05.2024 12:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
7
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете попробовать этот код вместо существующего кода.

$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, о котором я также упоминал в разделе комментариев.

-> поддерживать хорошо структурированный код, т. е. размещать {} правильно.

Попробуйте это и дайте мне знать.

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