Laravel複雜的'OR'與'AND'條件聯合查詢
阿新 • • 發佈:2018-12-04
需求場景:查詢中有部份條件是固定帶上的,有部份條件是多選一的。
假定有資料表users
,其中有欄位id
、name
、age
、sex
,要求查出如虛擬碼:(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也同樣適用。