如何按月获取数据? Laravel雄辩

时间:2019-09-25 23:31:12

标签: laravel laravel-5.8

我使用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()期望参数1为字符串,给定对象

有人可以帮助我进行适当的查询吗?

2 个答案:

答案 0 :(得分:1)

具有相同变量名的嵌套闭包函数非常令人困惑,您可以在此处简化操作

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

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

请参见Docs

答案 1 :(得分:0)

您应该使用sql方法 MONTH()从日期中提取月份,然后使用groubby。

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