whereを上手に使うと、データベースから望み通りの値を検索・抽出できます。
「OrやAndをwhereと組み合わせて、条件式を作りたい」
「whereをどう使うか、イマイチわからない」
という方のために、whereを使ってデータベースから思いのままにデータを抽出する方法を紹介します。
基礎編からレベル5まで、レベル別に解説していきますね。
データ抽出が苦手な方は、ぜひ、参考にしてください。
Laravel whereにAndやOrを組み入れた複雑な条件式の作り方
今回は、次のようなデータベーステーブルから、whereを使って値を取り出していきます。
レベル① whereの基本の使い方
まずは基本レベルから。
上記のテーブルから、dangoカラムが「みたらし」のデータを抽出するには、次のように書きます。
【コントローラー】
1 |
$dangos=Dango::where('dango', 'みたらし')->get(); |
このようにすると、表のなかから「じゅんこ」と「ただお」が抽出されます。
whereを使った基本の形をまとめると、下記のようになります。
whrereだけでは条件を指定するだけなので、値を抽出できません。
必ず get()または first()を最後にいれて、値を取得しましょう。
get()だと条件に合うものすべて、first()だと条件に一致する最初のデータを取得できます。
これ、非常に大事なポイントです。
get()で取得すると複数データ扱いになるので、ビューファイルでデータを表示する時は、foreachをよく使います。
【foreachをビューファイル上で使用する例】
1 2 3 4 5 |
@foreach($dangos as $dango) {{$dango->name}} @endforeach |
レベル② whereで複数の条件を入れる
次はレベル2。複数条件を使って、データを抽出してみましょう。
上記のテーブルから、dangoカラムが「みたらし」で、さらにnumberカラムが5個以上のデータを抽出します。
【コントローラー】
1 |
$dangos=Dango::where('dango', 'みたらし')->where('number', '>', 5)->get(); |
上記のように取り出すと、表のなかから「ただお」だけが抽出されます。
レベル③ orWhereを使って「または」条件を入れる
「AまたはB」といった条件で値を取り出したいときはorWhereが便利です。
上記のテーブルから、dangoカラムが「みたらし」または「あんこ」のデータを抽出してみましょう。次のように書きます。
【コントローラー】
1 2 3 |
$dangos=Dango::where('dango', 'みたらし') ->orWhere('dango', 'あんこ') ->get(); |
このようにすると、表のなかから「じゅんこ」「たけし」「ただお」が抽出されます。
レベル④ whereとorWhereを使って複雑な複数条件を入れる
次はレベル4。どんどん難しくなっていきます!
上記のテーブルから、
- dangoカラムが「みたらし」で、さらにnumberカラムが6個以上、
- またはdangoカラムが「あんこ」
のデータを抽出してみましょう。次のように書きます。
【コントローラー】
1 2 3 |
$dangos=Dango::where([['dango', 'みたらし'], ['number', '>=', 6]]) ->orWhere('dango', 'あんこ') ->get(); |
このようにすると、表のなかから「たけし」「ただお」が抽出されます。
レベル⑤ whereの中で変数を使って複雑な複数条件を入れる
最後はwhereとorWhereを使い、かつ、変数も使っていきます。
上記のテーブルから、
- dangoカラムが「みたらし」でnumberカラムが$num個以上、
- またはdangoカラムが「しょうゆ」
のデータを抽出してみましょう。
$numの値は、2としておきます。
この場合、次のようにwhereとorWhereと$queryを使って、コードを書きます。
【コントローラー】
1 2 3 4 5 6 |
$num=2; $dangos=Dango:: where(function($query) use($num){ $query->where([['dango', 'みたらし'], ['number', '>=', $num]]) ->orWhere('dango', 'しょうゆ'); })->get(); |
このようにすると、表のなかから「じゅんこ」「けいこ」「ただお」が抽出されます。
なお、useの後の変数はカンマ, で区切れば、複数設定できます。
ちょっと頭がこんがらがってきますが。
whereを使って、かなり色々な条件を作れちゃいますよね。
ぜひ、whereとorWhereを便利に使いこなしていきましょう♪