版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 https://blog.csdn.net/Jeffid/article/details/82998215
需求场景:查询中有部份条件是固定带上的,有部份条件是多选一的。
假定有数据表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也同样适用。