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
相关产品推荐
相关产品推荐

