Laravel PHP

【Laravel】ORMで複数の日付(DateTime型)のカラムを検索 DateTime型カラムのクエリ作成方法

概要

LaravelでDatetime型のカラムを含むテーブルから、複数の日付で検索する方法をお伝えいたします。

イベントと開催日付を保存している、eventsテーブルを例に説明します。

eventsテーブル

idevent_nameevent_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  |

-Laravel, PHP