クエリビルダーとは
SQLの命令文(クエリ)を作成して実行するための機能
やりたいこと
・各月ごとに投稿されたブログ数の集計
まず
$blogCounts = DB::table('blogs')
Laravelのクエリビルダーを使用してblogsテーブルに対してクエリを構築します
->select(
DB::raw("DATE_FORMAT(created_at, '%Y-%m') as month"),
DB::raw("COUNT(*) as blog_count")
)
DB::raw 生のSQLを直接クエリへ組み込むために使用します
created_atを'2024-09-01 12:34:56'→'2024-09'として、monthというエイリアスにし、
その月のブログ投稿数をカウントして、blog_countというエイリアスにします
※DATE_FORMAT 関数を使用すると引数に指定した日付を
指定のフォーマットで整形した文字列にして取得することができます
->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m')"))
->orderBy('month', 'desc')
->get();
月ごとにグループ化をして、その結果を月別に降順で表示します
$blogCounts = DB::table('blogs')
->select(
DB::raw("DATE_FORMAT(created_at, '%Y-%m') as month"),
DB::raw("COUNT(*) as blog_count")
)
->groupBy(DB::raw("DATE_FORMAT(created_at, '%Y-%m')"))
->orderBy('month', 'desc')
->get();
このクエリを実行すると
[
{
"month": "2024-09",
"blog_count": 10
},
{
"month": "2024-08",
"blog_count": 7
},
]
こんな感じでデータを取得することができました