Eloquent ORMで様々なwhere条件を設定する方法と複数条件の使い方
LaravelでSQLのWhere句を使う
LaravelのEloquentでは柔軟にSQLを生成するコードを記述することが出来ます。
EloquentのQuery Builderを利用していろいろなwhere条件を設定した例です。
シンプルな例
基本的なwhereの使い方が以下のコードです。Query Builderの使用方法と生成されるSQLを載せてみます。
Query Builder
$p = Product::where('userID', '1')->get();
SQL
select * from `products` where `userID` = '1'
and条件
複数の条件をandで設定します。SQLのand条件を生成する場合は、Query Builderでwhereを連結させることで生成することが可能です。
Query Builder
$p = Product::where('userID', '1')->where('viewed', '5')->get();
SQL
select * from `products` where `userID` = '1' and `viewed` = '5'
whereRawを使ったand条件
and条件は、whereRawを利用して書くことも可能です。
Query Builder
$p = Product::whereRaw('userID = ? and viewed = ?', array(1, 5))->get();
SQL
select * from `products` where `userID` = '1' and `viewed` = '5'
or条件
or条件は、orWhereを使います。
Query Builder
$p = Product::where('userID', '1')->orWhere('userID', '2')->get();
SQL
select * from `products` where `userID` = '1' or `userID` = '2'
andとorの複合条件
Query Builderを使って、andとorの複合条件を生成することも出来ます。
下のサンプルは、
viewedが4より大きい、かつuserIDが1、もしくは2
の行をselectするSQLを生成します。
Query Builder
$p = Product::where('viewed', '>', '4')->where('userID', '1')->orWhere('userID', '2')->get();
SQL
select * from `products` where `viewed` > '4' and `userID` = '1' or `userID` = '2'
あいまい検索
LaravelのEloquentでlike演算子を利用したあいまい検索のSQLを生成するコードは以下のとおりです。
Query Builder
$p = Product::where('title', 'like', '%keyword%')->get();
SQL
select * from `products` where `title` like '%keyword%'
パラメータを変数で渡す
あいまい検索で使うパラメータを変数で渡す場合の設定です。
$param = 'keyword'; $p = Product::where('title', 'like', "%{$param}%")->get();
NOT条件
NOT条件のwhereを生成するコードです。
userIDが2ではない
行をselectするSQLを生成します。
Query Builder
$p = Product::whereNotIn('userID', [2])->get();
SQL
select * from `products` where `userID` not in ('2')
複数の引数を指定
NOT条件で複数の引数を設定する場合のコードです。
$p = Product::whereNotIn('userID', [1, 2])->get();
SQL
select * from `products` where `userID` not in ('1', '2')
where + カラム名
whereメソッドにカラム名を追加して、対象のカラムを指定することが可能です。
Query Builder
$p = Product::whereTitle('keyword')->get();
SQL
select * from `products` where `title` = 'keyword'
Laravelで実行したSQLを確認では、Query Builderで生成されたSQL文を確認する方法をエントリーしてあります。