我从来没有真正使用过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 日的另一个日期分组。
所以简单地说,我只想按日期列的日期对结果进行分组,而忽略月份和年份。这是否可以通过(原始(查询,或者我应该在之后操作数据?
您也可以使用类似于@elitepc回答的内容,您的解决方案起作用的原因是因为您正确使用了 groupBy Collection 函数,此解决方案使用 groupBy Eloquent 查询生成器函数。不要与他们混淆,否则你会过得很糟糕。
这应该有效:
$payments = Payment::orderBy('created_at', 'DESC')
->groupBy(DB::raw('DAY(date)'))
->get();
这对我有用:
$payments = Payment::orderBy('created_at', 'DESC')->get()
->groupBy(function($date) {
return Carbon::parse($date->date)->format('d');
});
是的,这是可能的。 你可以试试这个。
$payments = Payment::->select(*, DB::raw('DAY(date) AS day'))->get();
$grouped = $payments->groupBy('day');
dd($grouped->toArray());
如果我没记错的话,你可以这样做一个小组:
$grouped = $payments->groupBy(DB::raw('DAY(date)'));
这样,只有日期的日期部分将被视为分组。