Laravel Eloquentを使用して週ごとにグループ化する方法


  1. created_at列を使用して週ごとにグループ化する場合:
$posts = Post::selectRaw('WEEK(created_at) as week, COUNT(*) as count')
            ->groupBy('week')
            ->get();
foreach ($posts as $post) {
    $weekNumber = $post->week;
    $count = $post->count;
    // ここで週ごとのデータを処理する
}
  1. 別の列(例えば、published_at)を使用して週ごとにグループ化する場合:
$posts = Post::selectRaw('WEEK(published_at) as week, COUNT(*) as count')
            ->groupBy('week')
            ->get();
foreach ($posts as $post) {
    $weekNumber = $post->week;
    $count = $post->count;
    // ここで週ごとのデータを処理する
}
  1. 日付範囲内の週ごとにグループ化する場合:
$start = '2022-01-01';
$end = '2022-12-31';
$posts = Post::selectRaw('WEEK(created_at) as week, COUNT(*) as count')
            ->whereBetween('created_at', [$start, $end])
            ->groupBy('week')
            ->get();
foreach ($posts as $post) {
    $weekNumber = $post->week;
    $count = $post->count;
    // ここで週ごとのデータを処理する
}

これらの例では、WEEK()関数を使用して日付を週番号に変換し、groupBy()メソッドを使用して週ごとにグループ化しています。適宜、selectRaw()メソッドを使用して必要な列と集計関数を指定してください。