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

Laravel控制器按日期分组统计并输出指定JSON格式

问题描述

我正在学习JSON,希望实现自定义输出:将同一日期的记录数量累加统计。

数据库表数据

id  no_id   type     created_at
------------------------------------------------
1    1      post     2023-10-11T17:13:19.000000Z
2    85     post     2023-10-11T17:13:19.000000Z
3    23     post     2023-10-12T17:24:33.000000Z
4    40     post     2023-10-12T17:24:33.000000Z
5    87     product  2023-10-12T17:24:33.000000Z

期望统计结果示例

2023-10-11 => 2
2023-10-12 => 3

当前Laravel控制器代码

class StatController extends Controller {
    public function index() {
        $stats = Stat::groupBy(DB::raw('DATE(created_at)'))->get()->toArray();

        return array_reverse($stats);
    }
}

当前输出JSON

[
    {
        "id": 2,
        "no_id": 85,
        "type": "post",
        "created_at": "2023-10-11T17:13:19.000000Z"
    },
    {
        "id": 5,
        "no_id": 87,
        "type": "product",
        "created_at": "2023-10-12T17:24:33.000000Z"
    }
]

目标输出JSON结构

[
    {
        "date": "2023-10-11",
        "totalViews": "2"
    },
    {
        "date": "2023-10-12",
        "totalViews": "3"
    }
]
解决方案

修改控制器中的查询逻辑,明确指定统计字段与聚合函数,替换直接获取整条记录的方式,代码如下:

class StatController extends Controller {
    public function index() {
        $stats = Stat::select(
            DB::raw('DATE(created_at) as date'),
            DB::raw('COUNT(*) as totalViews')
        )
        ->groupBy('date')
        ->orderBy('date', 'asc')
        ->get()
        ->toArray();

        return array_reverse($stats);
    }
}

代码说明

  1. 定义输出字段:通过select()提取created_at的日期部分并命名为date,用COUNT(*)统计每组记录数并命名为totalViews,完全匹配目标输出的字段结构。
  2. 分组逻辑:按提取后的date字段分组,确保同一日期的记录被归为一组统计。
  3. 排序与倒序:orderBy('date', 'asc')保证结果按日期正序排列,保留array_reverse()可维持原代码的倒序返回需求,不需要倒序可直接移除该方法。

修改后的输出JSON

[
    {
        "date": "2023-10-12",
        "totalViews": 3
    },
    {
        "date": "2023-10-11",
        "totalViews": 2
    }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:53:37