Laravel Eloquent,按月/年分组

2022-08-30 18:40:57

我正在尝试按月份和年份对数据进行分组。

$data ->select(DB::raw('count(id) as `data`'),DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
           ->groupby('year','month')
           ->get();

输出为:

{
"data": 19215,
"year": 2016,
"month": 10
},

如果我只按月分组,我不知道这个月属于哪一年,我的预期输出是:

{
"clicks": 19215,
"month": 11-2016,
},
{
"clicks": 11215,
"month": 12-2016,
},

我想在sql中做到这一点,而不是在php中。


答案 1

您可以尝试:

->select(DB::raw('count(id) as `data`'), DB::raw("DATE_FORMAT(created_at, '%m-%Y') new_date"),  DB::raw('YEAR(created_at) year, MONTH(created_at) month'))
->groupby('year','month')
->get();

答案 2

注意:这是基于雄辩的解决方案,是的,这不是最好的方法,但问题是,这是使用雄辩。如果你想要更快的方式,你可以用原始查询来做到这一点。

如果要对结果进行分组(例如按年),可以使用闭包,将日期时间解析为所需的格式(年或月)。

下面是代码示例:

$res= ModelName::where('someColumn','test')
      ->get()
      ->groupBy(function($val) {
      return Carbon::parse($val->created_at)->format('Y');
});

推荐