Laravel where条件の使い方

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文を確認する方法をエントリーしてあります。

Webエンジニアブログにコメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Laravel where条件の使い方の記事にコメントを投稿