You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel foreach循环中计算总计异常问题求助

问题原因与解决方案

你的问题核心是**$grand_total = 0;被放在了foreach循环内部**,导致每次遍历购物车商品时,总计都会被重置为0,最后只能累加最后一行的小计,自然只会返回最后一行的数值。

不需要必须修改控制器,两种方案都能解决:

方案一:直接修改Blade模板

把总计的初始化代码移到循环外面,避免每次循环重置:

@php
    $grand_total = 0; // 初始化移到循环外部
@endphp
@foreach ($cart as $row)
    @php
        $sub_total= $row->price * $row->qty;
    @endphp
    <ul style="list-style: none;">
        <li>Product Name : {{$row->product_name}}</li>
        <li><b>{{$row->price}}</b></li>
        <li>Qty : {{$row->qty}}</li><br>
        <li><b>Total : {{$sub_total}}</b></li>
    </ul>
    @php
        $grand_total += $sub_total;
    @endphp
@endforeach

<a href="/payment">
    <button style="width: 180px; height: 60px; font-size: 15px;">Checkout : Rp. {{$grand_total}} </button>
</a>

方案二:修改控制器(更推荐)

按照Laravel的MVC设计原则,业务计算逻辑尽量放在后端控制器中,视图只负责展示数据:

控制器代码示例:

public function cart()
{
    $cart = // 这里是你获取购物车数据的逻辑
    // 提前计算好总计
    $grand_total = $cart->sum(function($item) {
        return $item->price * $item->qty;
    });

    return view('your-cart-view-name', compact('cart', 'grand_total'));
}

修改后的Blade模板:

@foreach ($cart as $row)
    @php
        $sub_total= $row->price * $row->qty;
    @endphp
    <ul style="list-style: none;">
        <li>Product Name : {{$row->product_name}}</li>
        <li><b>{{$row->price}}</b></li>
        <li>Qty : {{$row->qty}}</li><br>
        <li><b>Total : {{$sub_total}}</b></li>
    </ul>
@endforeach

<a href="/payment">
    <button style="width: 180px; height: 60px; font-size: 15px;">Checkout : Rp. {{$grand_total}} </button>
</a>

两种方案都能解决你的问题,方案二更符合代码规范,也方便后续维护。

内容的提问来源于stack exchange,提问作者Januar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:08:35