一、高级查询
- | (OR) , & (AND) 来实现 where 条件的高级查询, where 支持多个连缀
Db::name('user')
->where('name','like','%小%')
->where([['price','>',40],['uid','>',10]])
->select();
- 有多个where ,且 where 条件是分离的 $map,而 $map 本身又是多个条件,那么 $map 条件如果需要先执行结果,再和后条件判断,也就是加上括号;那么就对这个 $map 变量,再加上一个中括号,处理优先级。
$map = [
['id','>',10]
['price','exp',Db::raw('>80')]
];
Db::name('user')
->where([$map])
->where('status','=',1)->select():
- 条件字段多次出现,且需要 OR 来左右查询,可以用 whereOr
$map1 =[
['name','like','%汪'],
['email','like','%163%']
];
$map2 =[
['name','like','%小%']
];
Db::name('user')->whereOr([$map1,$map2])->select();
- 闭包查询可以连缀,会自动加上括号,更清晰,如果是OR,请用 whereOR()
Db::name('user')->where(function($query){
$query->where('id','>',10);
})whereOr(function($query){
$query->where('name','like','%小');
})->select();
- 比较复杂或不知道怎么拼接的 SQL条件,可直接使用 whereRaw() 即可
Db::name('user')
->whereRaw('(name like "%小%" and email like "%163%") or (price > 70)')
->select();
- whereRaw() 方式支持参数绑定
Db::name('user')
->whereRaw('(name like :name and email like :email) or (price > :price)',['name'=>'%n','email'=>'%e','price'=>3)
->select();