LoginSignup
0
0

More than 1 year has passed since last update.

【Eloquent】条件に当てはまるもの・またはNULLであるものの抽出

Posted at

便利なメソッドが見つからなかったので、単にorWhere条件で抽出する。

// 例:掲載終了日時が到来していない・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::whereDate('display_end_date', '>', now())->orWhereNull('display_end_date')->get();

他にも条件がある場合はA & (B or C)になるようにクロージャを使用する。

// 例:ID > 1000のうち、掲載終了日時が過ぎている・もしくは掲載終了日時がNULLの記事を取得する場合
$articles = Article::where('article_id', '>', 1000)
                   ->where(function ($query) {
                        $query->whereDate('display_end_date', '>', now())
                              ->orWhereNull('display_end_date');
                    })->get();

...と書いている途中に、そもそも設計の時点でDBの値がNULLになることが少なくなるようにしたほうがいいのでは?と思った。

NULLが設定されたカラムは「NULLがどういった意味なのか」という設計者の意図が読み取りにくい気がする。

(上記例では「掲載終了日時にNULLが設定されているものはいつまでも残す」の意だが本当にそう読み取れるか怪しい)

掲載終了日時であれば「いつまでも残すものには9999-12-31を設定する」とかにしておけば、「ああ、時間経過で消えない通知なのね」ということがわかるし、NULLを考慮しなくてよくなるのでorWhereNullの条件自体要らなくなる!!...はず。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0