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

Laravel中基于指定数据集统计manifestNumber对应originRemitStatus=1的计数

解决manifestNumber对应的originRemitStatus=1记录统计需求

嘿,我来帮你搞定这个统计需求!你已经拿到了originRemitStatus为null的运单列表$unsentManifests,现在需要统计每个唯一manifestNumber对应的全量记录中originRemitStatus=1的数量,下面给你两种可行的实现方式:

方法一:基于现有集合处理(适合小数据量)

先从已有的$unsentManifests集合中提取所有唯一的manifestNumber,再逐个统计对应状态为1的记录数:

// 提取所有唯一的manifestNumber
$uniqueManifestNumbers = $unsentManifests->pluck('manifestNumber')->unique();

// 遍历每个编号,统计status=1的数量
$statusCounts = $uniqueManifestNumbers->mapWithKeys(function ($number) {
    $count = Carrier_Manifest::where('manifestNumber', $number)
        ->where('originRemitStatus', 1)
        ->count();
    return [$number => $count];
});

// 输出成你需要的列表格式
foreach ($statusCounts as $number => $count) {
    echo "<li>{$number} ({$count})</li>";
}

方法二:直接数据库查询(高效,适合大数据量)

如果数据量较大,多次查询数据库会影响性能,推荐用子查询一次性搞定:

$statusCounts = Carrier_Manifest::select(
        'manifestNumber',
        \DB::raw('SUM(CASE WHEN originRemitStatus = 1 THEN 1 ELSE 0 END) as count')
    )
    ->whereIn('manifestNumber', function ($query) {
        // 子查询获取所有存在originRemitStatus为null的manifestNumber
        $query->select('manifestNumber')
            ->from('carrier_manifests') // 替换成你的实际表名
            ->whereNull('originRemitStatus');
    })
    ->groupBy('manifestNumber')
    ->pluck('count', 'manifestNumber');

预期输出结果

运行上述代码后,你会得到符合需求的统计结果,格式如下:

  • 1234 (1)
  • 9876 (0)
  • 4567 (1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:02:27