Laravel中如何统计特定交易下未发送的AcceptedCarts数量?
解决Laravel中统计特定Transaction下未发送AcceptedCarts数量的问题
你当前的代码之所以返回所有未发送的总数,是因为调用$transaction->whereHas()时,实际发起了一个新的全局查询,而非基于当前Transaction实例的关联数据统计。以下是两种可行的解决方法:
方法一:直接在视图中统计(适合数据量小的场景)
通过遍历当前Transaction关联的Carts,逐个统计未发送的AcceptedCarts数量并求和:
@foreach($Transactions as $transaction) {{ $transaction->carts->sum(function ($cart) { return $cart->acceptedcarts->where('sended', false)->count(); }) }} @endforeach
方法二:预加载统计(性能更优,适合数据量大的场景)
在控制器中预加载关联时,提前计算每个Cart下未发送的AcceptedCarts数量,避免N+1查询问题:
// 控制器代码 $Transactions = Transaction::with(['carts' => function ($query) { $query->withCount(['acceptedcarts' => function ($subQuery) { $subQuery->where('sended', false); }]); }])->get();
然后在视图中直接调用预加载好的统计值求和:
@foreach($Transactions as $transaction) {{ $transaction->carts->sum('acceptedcarts_count') }} @endforeach
内容的提问来源于stack exchange,提问作者aref razavi
相关产品推荐
相关产品推荐

