您的位置:首页 > 编程语言 > PHP开发

Laravel复杂的'OR'与'AND'条件联合查询

2018-10-10 15:44 525 查看
版权声明:本文为博主原创文章,欢迎交流分享,未经博主允许不得转载。 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()使用
[/code]

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
]
]
[/code]

即:

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

上面的示例是查询构造器的写法,Eloquent ORM也同样适用。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: