如何按月获取数据? Laravel Eloquent

How to get datas by month? Laravel Eloquent

使用 created_at 列,我想 在一个查询中检索数据:


预期的返回值应该:

$data: [
    1 : [
        //datas for january
    ],

    2 : [
        //datas for february
    ],

    //etc.
]


我试过这个查询:

$data = User::query()
    ->whereYear('created_at', now()->year - 1)
    ->get(function ($q){
        return groupBy(function ($q){
            return Carbon::parse($q->created_at)->format('m');
        });
    });

但是我收到这个错误:

stripos() expects parameter 1 to be string, object given

有人可以帮我正确查询吗?

你应该使用 sql 方法 MONTH() 从日期中提取月份然后使用 groubby 。像这样:

 User::query()->select('created_at',  DB::raw('MONTH(created_at) month'))
->whereYear('created_at', now()->subYear())
->groupby('month')
->get();

相同变量名的嵌套闭包函数很混乱,你可以在这里简化一下

get 之后调用集合的 groupBy 方法,而不是显然只接受列名的构建器

$data = User::query()
            ->whereYear('created_at', now()->year - 1)
            ->get()
            ->groupBy(function ($q) {
                return Carbon::parse($q->created_at)->format('m');
            });

Docs