⚠️: 海外の記事をchatGPTで要約しただけのもの、主に自分用
Laravel は開発者の生産性向上を目指し、クエリビルダーに日付ベースのクエリをより直感的に記述できる新たなメソッド群を追加しました。今回のアップデートは、Jason McCreary さんのプルリクエストを基に実現され、コードの可読性と保守性を大幅に向上させます。
新しい日付クエリメソッド一覧
wherePast()
概要:
日付カラムが過去の日付であるレコードを取得します。
使用例:
$pastRecords = Model::wherePast('date_column')->get();
whereNowOrPast()
概要:
日付カラムが現在または過去のレコードを取得します。
使用例:
$records = Model::whereNowOrPast('date_column')->get();
orWherePast()
概要:
既存の条件に対して「または過去」の条件を OR で追加します。
使用例:
$records = Model::where('other_column', '=', 'value')
->orWherePast('date_column')
->get();
orWhereNowOrPast()
概要:
既存の条件に対して「または現在または過去」の条件を OR で追加します。
使用例:
$records = Model::where('other_column', '=', 'value')
->orWhereNowOrPast('date_column')
->get();
whereFuture()
概要:
日付カラムが未来の日付であるレコードを選択します。
使用例:
$futureRecords = Model::whereFuture('date_column')->get();
whereNowOrFuture()
概要:
日付カラムが現在または未来のレコードを取得します。
使用例:
$records = Model::whereNowOrFuture('date_column')->get();
orWhereFuture()
概要:
既存の条件に対して「または未来」の条件を OR で追加します。
使用例:
$records = Model::where('other_column', '=', 'value')
->orWhereFuture('date_column')
->get();
orWhereNowOrFuture()
概要:
既存の条件に対して「または現在または未来」の条件を OR で追加します。
使用例:
$records = Model::where('other_column', '=', 'value')
->orWhereNowOrFuture('date_column')
->get();
新メソッドがもたらす改善点
従来、日付ベースのフィルタリングは以下のように記述していました。
$pastRecords = Model::where('date_column', '<', now())->get();
新たなメソッドを使用することで、上記のコードがよりシンプルかつ直感的に記述できるようになり、意図が明確に伝わるようになりました。
使用例
1. 期限切れのサブスクリプションを全件取得
$expiredSubscriptions = Subscription::wherePast('expires_at')->get();
2. 現在または将来に開催されるイベントを取得
$upcomingEvents = Event::whereNowOrFuture('event_date')->get();
3. 過去に注文されたオーダーを取得
$pastOrders = Order::wherePast('created_at')->get();
その他追加メソッドと合わせたまとめ
// New methods in Laravel 11.42:
// 過去の日付に一致するデータを取得
Model::wherePast($columns)
// 現在または過去の日付に一致するデータを取得
Model::whereNowOrPast($columns)
// 過去の日付に一致するデータを OR 条件で追加
Model::orWherePast($columns)
// 現在または過去の日付に一致するデータを OR 条件で追加
Model::orWhereNowOrPast($columns)
// 未来の日付に一致するデータを取得
Model::whereFuture($columns)
// 現在または未来の日付に一致するデータを取得
Model::whereNowOrFuture($columns)
// 未来の日付に一致するデータを OR 条件で追加
Model::orWhereFuture($columns)
// 現在または未来の日付に一致するデータを OR 条件で追加
Model::orWhereNowOrFuture($columns)
// 過去または未来の日付に一致するデータを取得(比較演算子と論理演算子を指定可能)
Model::wherePastOrFuture($columns, $operator, $boolean)
// 今日の日付に一致するデータを取得(デフォルトで AND 条件)
Model::whereToday($columns, $boolean = 'and')
// 今日より前の日付に一致するデータを取得
Model::whereBeforeToday($columns)
// 今日または今日より前の日付に一致するデータを取得
Model::whereTodayOrBefore($columns)
// 今日より後の日付に一致するデータを取得
Model::whereAfterToday($columns)
// 今日または今日より後の日付に一致するデータを取得
Model::whereTodayOrAfter($columns)
// 今日の日付に一致するデータを OR 条件で追加
Model::orWhereToday($columns)
// 今日より前の日付に一致するデータを OR 条件で追加
Model::orWhereBeforeToday($columns)
// 今日または今日より前の日付に一致するデータを OR 条件で追加
Model::orWhereTodayOrBefore($columns)
// 今日より後の日付に一致するデータを OR 条件で追加
Model::orWhereAfterToday($columns)
// 今日または今日より後の日付に一致するデータを OR 条件で追加
Model::orWhereTodayOrAfter($columns)
// 今日より前または後の日付に一致するデータを取得(比較演算子と論理演算子を指定可能)
Model::whereTodayBeforeOrAfter($columns, $operator, $boolean)
// P.S. $columns にはカラム名を1つ指定することも、複数のカラムを配列で指定することも可能
元記事