有没有人能看出我做错了什么?
我正在尝试输出所有月份,但是将它们分组,使它们唯一。
$months = NewsItem::select(DB::raw('MONTH("created_at") as month'))->groupBy('month')->get();
return $months;
我得到了以下的回复。
{"month":null}
在我的数据库中,有五篇新闻文章,所有文章都是在05/01/2017创建的,所以只得到一条响应是正确的,但我没有获得月份的数字?
你可以使用带有闭包的groupBy()
方法:
$months = NewsItem::groupBy(function($d) {
return Carbon::parse($d->created_at)->format('m');
})->get();
或者先获取数据,然后在Eloquent集合上使用groupBy()
:
$months = NewsItem::get()->groupBy(function($d) {
return Carbon::parse($d->created_at)->format('m');
});
为什么在您的用例中需要使用group by子句?
如果您不需要获取任何其他需要使用group by的数据,只是想要一个不同月份的列表,请使用distinct。
$months = NewsItem::selectRaw("MONTH(created_at) as month")->distinct()->get();
distinct()
查询比select *
更快,并在PHP中对结果进行分组。null
作为返回值的原因是因为你在MONTH()
函数中使用了一个字符串而不是实际字段。$months = NewsItem::groupby(\DB::raw('MONTH(created_at) as month'))->get();
NewsItem::get(["*",\DB::raw('MONTH(created_at) as month')])->groupBy('month');
$month = NewsItem::select(
DB::raw('DATE_FORMAT(created_at, "%M") as month'))
->groupBy('month')
->get();
如果想要每月获得收益,可以尝试以下代码:
$getMonthlyReport = OrderMaster::select(DB::raw("sum(order_total_amt) as earnings,date_format(order_date, '%Y-%m') as YearMonth"))
->groupBy('order_date')
->get();