版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oZhengTuoJiaSuo/article/details/82383519
ThinkPHP5框架where 内部实现 精选or 条件拼接,一直没有找到合适的方法,不像tp3版本可以使用采用以下方法:
$map['user_id'] = 1;
$map['status'] = 0;
$or_map['user_id'] = 1;
$or_map['audit']=['in',['1,2']];
$where_main['_complex'] = array(
$map,
$or_map,
'_logic' => 'or'
);
$this->table->where($where_main)->select();
tp5中采用闭包的方式:
$map['user_id']=1;
$map['status']=0;
$or_map['user_id']=$map['user_id'];
$or_map['audit']=['in',['1,2']];
$list = Db::name('table')->where(function ($query) use ($map) {
$query->where($map);
})->whereOr(function ($query) use ($or_map) {
$query->where($or_map);
})->limit(0,$pn*$page_size)->select();
生成的sql语句:
SELECT * FROM `tp_table` WHERE ( `user_id` = '1' AND `status` = 0 ) OR ( `user_id` = '1' AND `audit` IN ('1,2') )