- 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;
// ここで週ごとのデータを処理する
}
- 別の列(例えば、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;
// ここで週ごとのデータを処理する
}
- 日付範囲内の週ごとにグループ化する場合:
$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()
メソッドを使用して必要な列と集計関数を指定してください。