1. 程式人生 > >Laravel複雜的'OR'與'AND'條件聯合查詢

Laravel複雜的'OR'與'AND'條件聯合查詢

需求場景:查詢中有部份條件是固定帶上的,有部份條件是多選一的。
假定有資料表users,其中有欄位idnameagesex,要求查出如虛擬碼:(id==3 && sex==1) OR (name=="jay" && age>18 && sex==1)示意的結果,即sex固定等於1,id等於3或者是 age>18且name等於jay。

查詢構造器的示例:

//DB::enableQueryLog(); 

DB::table('users')
   ->where(function ($q) {  //閉包返回的條件會包含在括號中
return $q->where('id', 3) ->orWhere([ ['name', 'jay'], ['age', '>', '18'] ]); }) ->where('sex', 1) ->get(); //dd(DB::getQueryLog()); //檢視SQL語句, 須配合enableQueryLog()使用

DB::getQueryLog()l輸出的實際SQL執行語句:

array:1 [0 =
> array:3 ["query" => "select * from `users` where (`id` = ? or (`name` = ? and `age` > ?)) and `sex` = ?" "bindings" => array:4 [0 => 3 1 => "jay" 2 => "18" 3 => 1 ] "time" => 6.43 ] ]

即:

"select * from `users` where (`id` = 3 or (`name` = "
jay" and `age` > 18)) and `sex` = 1"

上面的示例是查詢構造器的寫法,Eloquent ORM也同樣適用。