拉拉维尔组由和原始查询

  • 本文关键字:原始 查询 php laravel
  • 更新时间 :
  • 英文 :


我从来没有真正使用过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)'));

这样,只有日期的日期部分将被视为分组。

最新更新