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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:24:12