2018/10/12
これからLaravelでWEBアプリを作っていくのであればDBの扱いに慣れておかなければなりません。
DBのテーブルを上手く扱うためにはクエリービルダーの使い方を学習する必要があります。
WHERE節の使い方
基本
Where節の基本的な使い方は
第1引数はカラム名
第2引数はデータベースがサポートしているオペレーター
(※オペレータが '=' (等しい)場合は第2引数を省略できます。)
第3引数はカラムに対して比較する値
になります。
where(‘カラム名’, ‘不等号などのオペレーター’, ‘比較する値’)
[例] "votes"カラムの値が100と等しいレコードのクエリを発行する場合
#Query Builder use DB; $users = DB::table('users')->where('votes', '=', 100)->get();
クエリービルダーはDBファサードのTABLEメソッドを使います。
先にuseでDBクラスをインポートします。
チェーンの最後にあるgetメソッドはクエリーの結果(レコード)を配列にして返してくれます。
つまり、$usersは配列になります。
$usersを取り出すときはforeachでまわします。
foreach ($users as $user) { echo $user->name; }
Eloquentはクエリービルダーなので同じように使うことができます。
#Eloquent use App\User $users = User::where('votes', '=', 100)->get();
EloquentはUserモデル(※テーブルに対応するモデル)を介してDBのテーブルを操作します。
DBクラスではなくUserモデルをインポートします。
応用
基本形に集計メソッドやorderByメソッドなど、チェーンで繋げていきます。
並び順を追加
基本形の形にチェーンでOrderByメソッドを追加します。
[例] "votes"カラムの値が100と等しい条件で抽出し、nameカラムを昇順で並びかえて表示。
$users = DB::table('users') ->where('votes', '=', 100) ->orderBy('name', 'desc') ->get();
orderByメソッドの最初の引数はソート対象のカラムです。
第2引数はソートの降順(asc)と昇順(desc)で並びかえます。
1レコードのみ抽出
基本形の形にチェーンでfirstメソッドを追加します。
[例] "votes"カラムの値が100と等しい条件で最初のレコードのみ抽出。
$user = DB::table('users') ->where('votes','=', '100') ->first();
OR節を追加
基本の形にチェーンで orWhereメソッド を追加します。
[例] "votes"カラムの値が100と等しいもしくは"name"カラムが"John"の条件を抽出。
$users = DB::table('users') ->where('votes', '=', 100) ->orWhere('name', 'John') ->get();
集計を追加
基本形の形にチェーンでcountメソッドを追加します。
[例] "votes"カラムの値が100と等しい条件のレコードをカウントして抽出。
$user = DB::table('users') ->where('votes','=', '100') ->count();
countメソッド以外にもmax、min、avg、sumメソッドも使用できます。
複数条件
Where節には配列で条件を渡すこともできます。
[例] "status"カラムの値が1と等しくかつ"subscribed"カラムが1と等しくない。
$users = DB::table('users')->where([ ['status', '=', '1'], ['subscribed', '<>', '1'], ])->get();
クエリービルダーについては以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。