我从来没有真正使用过groupBy或原始查询,尤其是很长时间以来。我只是想知道是否可以进行以下操作:
$payments = Payment::all();
$grouped = $payments->groupBy('date');
dd($grouped->toArray());
以上内容将为我提供以下输出:
"2018-08-21" => array:1 [▶]
"2018-06-21" => array:1 [▶]
我想做的就是抓取这样的数据:
"2018-08-21" => array:2 [▶]
因此,基本上我想将月份转换为当前月份,然后按日期对数据进行分组。在上面的示例中,日期21-06-2018
已更改为21-08-2018
,并且已与21日的其他日期分组。
因此,简而言之,我只想按日期列中的日期对结果进行分组,而忽略月份和年份。 (原始)查询是否有可能?还是我以后应该处理数据?
答案 0 :(得分:2)
这对我有用:
$payments = Payment::orderBy('created_at', 'DESC')->get()
->groupBy(function($date) {
return Carbon::parse($date->date)->format('d');
});
答案 1 :(得分:2)
您还可能使用了与@elitepc回答类似的东西,您的解决方案起作用的原因是因为您正确使用了groupBy Collection函数,该解决方案使用了groupBy Eloquent查询构建器函数。不要对它们感到困惑,否则您会度过一段糟糕的时光。
这应该有效:
$payments = Payment::orderBy('created_at', 'DESC')
->groupBy(DB::raw('DAY(date)'))
->get();
答案 2 :(得分:1)
是的,有可能。 你可以试试看。
$payments = Payment::->select(*, DB::raw('DAY(date) AS day'))->get();
$grouped = $payments->groupBy('day');
dd($grouped->toArray());
答案 3 :(得分:0)
如果我没记错的话,可以这样分组:
$grouped = $payments->groupBy(DB::raw('DAY(date)'));
这样,仅将日期的一天部分视为分组。