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

Laravel中如何按日期分组并统计对应数据的数量?

如何按日期分组并统计匹配记录总数?

嘿,我来帮你搞定这个统计需求!你现在的代码会把相同日期的记录覆盖掉——因为直接给$array[$match->date_access]赋值,最后每个日期只会保留最后一条的status,自然没法统计总数。下面给你两种高效的实现方式:

方法一:数据库层面分组统计(推荐)

直接让数据库完成分组和统计,性能更好,尤其是数据量较大的时候:

$matchCounts = DiraChatLog::where('status', '=', 'Match')
    ->whereBetween('date_access', [$request->from, $request->to])
    ->selectRaw('DATE(date_access) as date, COUNT(*) as total')
    ->groupBy('date')
    ->get();

小说明:

  • DATE(date_access) 用来把日期时间字段提取出纯日期部分(如果你的date_access本身就是日期类型,直接用date_access即可);
  • COUNT(*) 负责统计每个日期下的记录总数;
  • groupBy('date') 按日期完成分组;
  • 最终得到的集合里,每个元素都包含date(日期)和total(对应总数)字段,直接调用就行。

如果你的数据库是PostgreSQL,把DATE(date_access)换成DATE_TRUNC('day', date_access)就可以适配。

方法二:Laravel集合层面处理

如果已经拿到了$matchs集合,也可以用Laravel的集合方法来处理:

$matchs = DiraChatLog::where('status','=','Match')
    ->whereBetween('date_access', [$request->from, $request->to])
    ->get();

$dateCounts = $matchs->groupBy(function ($item) {
    // 提取日期部分,根据字段类型调整格式
    return $item->date_access->format('Y-m-d');
})->map(function ($group) {
    return $group->count();
});

dd($dateCounts);

小说明:

  • groupBy() 接收一个闭包,把每条记录按日期完成分组;
  • map() 遍历每个分组,返回分组内的记录总数;
  • 最终得到的是一个键为日期、值为对应总数的集合,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:42:51