こんにちはエンジニアのオータケです!
今回はLaravelでデータを引っ張ってくるときのお話です。
findメソッドなどといったメソッドの使い方はわかったけど、データを取得する際に条件を指定できないの?と思った方はぜひこの記事をご覧ください。
SQLで当たり前のように使われているwhere句をLaravelで書くにはwhereメソッドというものがあります。
そのwhereメソッドの使い方について解説していきます。
この記事では
[基礎] whereメソッドの使い方
[実践] 複雑な条件指定について
について解説をします。
Laravelの学習を始めたばかりの方はぜひご覧ください!
EloquentORMとは
まず、データを取得するにあたってEloquentORMというものを使う必要があります。
これはLaravelが標準で用意している機能でデータベースからデータを取得するなどいくつかの場面で使う機能になります。
特段何か準備が必要というわけでもないのですが、これからwhereメソッドを解説するに当たりこの機能を使うということを覚えておくと良いでしょう。
whereメソッドで条件を指定してデータを取得しよう
通常の書き方
まず最初にシンプルな条件を指定してみましょう。
例えば、SQL文で言うところの
SELECT * FROM users WHERE id = 1;
の場合は次のような形で表現できます。
$user = User::where('id',1)->get();
このようにUserモデルを利用してidが1のユーザーを取得するようにしています。
とっても直感的でわかりやすいですね。
複数の条件で絞り込む場合
では次に、idが1でかつ、score(ユーザー毎に得点のカラムがあるとする)が100のユーザーを抽出してみましょう。
通常のSQLの場合は、
SELECT * FROM users WHERE id = 1 AND score = 100;
となります。
ではこれを、Laravelのwhereメソッドを用いて書くと・・・
$user = User::where('id', 1)->where('score', 100)->get();
このように書くことができます。
whereを繋げた場合は自動的にAND条件となります。
これもとてもわかりやすいですね。
では次の章でもう少し複雑な条件の絞り方について見てみましょう。
whereメソッド以外にも条件を絞り込むメソッドたち
どちらかが条件を満たす場合(orWhere)
先程はwhereメソッドをつなげることでAND条件となると解説しました。
ではこれをOR条件にしたい場合はどうすればよいでしょうか?
そのOR条件にするためのメソッドであるorWhereメソッドが用意されています。
早速、SQLの例文とともに見てみましょう。
SQL
SELECT * FROM users WHERE id = 1 OR score >= 90;
Laravel
$users = User::where('id', 1)->orWhere('score', '>=', 90)->get();
これでIDが1のユーザーか、スコアが90以上のユーザーを取得することができます。
先ほどと書き方はほぼ変わらず、orWhereで繋げているだけですね。
あとは、>=という条件を今回書いています。
>=や>などといった不等号式を入れる場合は引数を3つにして与えます。
これも直感的な書き方であるため難しくないですね。
カラムの値が特定の値である場合(whereIn)
次に特定の値である場合にデータを取得したい場合の方法についてご紹介いたします。
まずはSQL文から見てみましょう。
SQL
SELECT * FROM users WHERE id IN (1, 3, 5);
このようにかけるかと思います。
ではLaravelで書く場合はどうすればよいでしょうか。
$user = User::whereIn('id', [1, 3, 5])->get();
たった、これだけです。
この書き方も難しくないですし覚えやすいですよね。
ポイントは第二引数が配列になっているという点です。
ここは間違えないようにしましょうね。
条件を満たさない場合(whereNotIn)
最後に条件を満たさない場合について見てみましょう。
書き方が2種類あります。
まず比較演算子を使って書く場合は
$users = User::where('id', '!=', 18)->get();
と書くことでIDが18以外のユーザーを取得することができます。
それ以外にもwhereNotInを使うことで同様な書き方をすることもできます。
$users = User::whereNotIn('id', [18])->get();
このようにwhereNotInを使い、第二引数に値を指定することで実現することができます。
第二引数は複数値を渡すことも可能です。
まとめ
いかがでしょうか?
データベースからデータを取得する際に必ずといっていいほど条件で絞り込みますよね?
本日学んだ、where, orWhere, whereIn, whereNotInといった内容はよく使います。
しっかり頭に入れて開発にどんどん活かしていきましょう!