概要
LaravelでDatetime型のカラムを含むテーブルから、複数の日付で検索する方法をお伝えいたします。
イベントと開催日付を保存している、eventsテーブルを例に説明します。
eventsテーブル
id | event_name | event_date |
---|---|---|
1 | 餅つき大会 | 2023-01-01 10:00:00 |
2 | バレンタインイベント | 2023-02-14 11:00:00 |
3 | ホワイトデーイベント | 2023-03-14 12:00:00 |
4 | 卒業式イベント | 2023-04-10 13:00:00 |
5 | 新学年イベント | 2023-05-01 14:00:00 |
1月1日の餅つき大会を取り出したい場合は、以下で取得します。
$orders = DB::table('events')
->where(order_date, '2023-01-01 10:00:00')
->get();
ただ、実際は日時まで把握できていることは少なく、年月のみで取得したいときなどがほとんどです。
そこで、2023年の2月〜3月に起きるイベントを検索する方法についてeventsテーブルを例にご紹介します。
方法
LaravelのORMを使用して、DateTime型のカラムを6桁の年月の配列で複数検索する方法は、
whereIn
メソッドとdate_format
関数を組み合わせることで実現できます。
2023年の2月〜3月を年 + 月で6桁の数字の配列にします。
$months = ['202202', '202203'];
この配列を使って、eventsの年月が$monthsのいずれかの値に一致するレコードを取得するには、
$orders = DB::table('events')
->whereIn(DB::raw("date_format(event_date, '%Y%m')"), $months)
->get();
date_format関数を使用して、DateTime型のカラムから年月を取得し、
それをwhereInメソッドで検索することで、6桁の年月の配列で複数検索することができます。
取得結果
| id | order_number | order_date |
|----|----------------|----------------------|
| 2 | バレンタインイベント | 2022-02-14 11:00:00 |
| 3 | ホワイトデーイベント | 2022-03-14 12:00:00 |