2017-01-05 53 views
2

誰かが間違っているのを見ることができますか?Laravel Carbonグループ月間

私はすべての月を出力しようとしていますが、それらは一意になるようにグループ化しています。

$months = NewsItem::select(DB::raw('MONTH("created_at") as month'))->groupBy('month')->get(); 
return $months; 

私はすべてのcreated_at 2017年5月1日5件のニュース記事を持っている私のデータベースに戻って、次の

{"month":null} 

を取得していますので、それは私が唯一の応答を得ることを右ですが、私はありませんよ月の番号を戻していますか?雄弁コレクションにgroupBy()を使用し、その後

$months = NewsItem::groupBy(function($d) { 
    return Carbon::parse($d->created_at)->format('m'); 
})->get(); 

するか、最初のデータを取得し、::

$months = NewsItem::get()->groupBy(function($d) { 
    return Carbon::parse($d->created_at)->format('m'); 
}); 

答えて

1

あなたは閉鎖とgroupBy()メソッドを使用することができます?

グループが必要な追加データを取得していないため、別々の月のリストが必要なので、distinctを使用してください。

$months = NewsItem::selectRaw("MONTH(created_at) as month")->distinct()->get(); 

はまた、アレクセイが提供するソリューションを見て、あなたがやろうとしているものを見て、非常に非効率的であるDBからのデータセット全体を取得する必要があります。クエリdistinct()は、select *よりもはるかに高速で、PHPで結果をグループ化します。

編集:ここ

リトル追記あなたの代わりに、実際のフィールドのMONTH()機能で文字列を使用するための値であるとして、あなたがnullを取得する理由が返さ。

0

なぜあなたはあなたのユースケースにgroup by句が必要です

0

単純にgroupbyとmysql MONTHを使用できます。

$months = NewsItem::groupby(\DB::raw('MONTH(created_at) as month'))->get(); 
関連する問題