Laravel

【Laravel】ORM where句で日時と比較する方法(whereRaw, whereBetween)

概要

Laravelで日付と比較する方法をお伝えします。

where句だけでなく、whereRawwhereBetweenなど、

意外と便利な書き方がありとても勉強になりました。

少し躓いたポイントも含め備忘録として残します。

where / whereRaw / whereBetween

where

カラムAより前

->wherer('カラムA', '>', '比較するカラム')

今より前

->wherer('NOW()', '>', '比較するカラム')

昨日より前

->wherer('NOW() - INTERVSL 1 day', '>', '比較するカラム')

whereRaw

SQLを使いたいとき

例えば、DATETIME(1990-01-01 00:00:00)でDBに保管されているcreated_atと、

入力された年月(1990-02)を比較したいとき、比較するにはフォーマットを揃える必要があります。

このようなときは、SQLのDATE_FORMAT()でを使います。

$yearMonth = '1990-02';
->whererRaw("DATE_FORMAT(カラム, 'フォーマット') <= ?", [$yearMonth])

SQLは " もしくは ' で囲んで文字列にする

第2引数の変数は配列にする

インジェクション対策のために ? を使ってバインドする

whereBetween

カラムAとカラムBの間のカラムを検索したいとき

現在時刻に応じて、言葉を表示させるたい場合

朝の7時のときは「おはよう」のレコードを取得したいです。

->whereを2つ使ってもできそうですが、

期間を検索したいときには->whereBetweenを使うと便利です。

->whererBetween(検索対象, [開始, 終了])

現在時刻はNOW()で指定して、

->whererBetween(DB::raw('NOW()'), [DB::raw('開始時間のカラム'), DB::raw('終了時間のカラム')])

-Laravel