0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

whereとorWhereを併用するときは順番に気を付けよう

Posted at

はじめに

実務でwhereとorWhereを併用してデータを取得しようとした時に、想定と違ったデータを取得してしまったことがあったので、whereとorWhereを併用する際に気を付けることを備忘録として残します。

シチュエーション

例として、Bクラスの「田中さん」か「佐藤さん」を取得したい状況とします。

実装コード(NG)

まずはNGの例からです。

User::where('class','=','B')
   ->where('name','=','田中')
   ->orWhere('name','=','佐藤')
   ->get();

まずクラスをBでソートしてから、田中さん or 佐藤さんを取得しようとしています。
しかしこの時、OR条件の「orWhere」よりもAND条件の「where」の方が先に来ているため、AND条件の「where」の方が優先されてしまいます。

そのため「Bクラスの田中さん」or「全クラスの中の佐藤さん」を取得することになってしまいます。

実装コード(OK)

User::where('name','=','田中')
   ->orWhere('name','=','佐藤')
   ->where('class','=','B')
   ->get();

OR条件の「orwhere」の方が先に来ているため、「Bクラスの田中さん」or 「Bクラスの佐藤さん」と目的のものを取得することができます。

最後に

順番が少し違うだけで取得できるものが全く異なってしまうので、これからクエリを書く際は充分に気を付けようと思います。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?