tp3.2 来说, or 或者and 的操作可以在一个数组中用_logic 来解决,但是tp6的不行。tp6的and 和 or 可以实现的方法比较多!
已知:->where(A)->where(B) 俩个条件关系是 A and B
1.多字段相同的查询条件, 可以使用 |(or) &(and)
Db::table('think_user')
->where('name|title','like','thinkphp%')
->where('create_time&update_time','>',0)
->find();
sql:
SELECT * FROM `think_user`
WHERE ( `name` LIKE 'thinkphp%' OR `title` LIKE 'thinkphp%' )
AND ( `create_time` > 0 AND `update_time` > 0 ) LIMIT 1
2.不同字段不同条件,包含 and 和or 的建议使用闭包查询。因为数组条件查询的达不到想要的效果(我是用不出来)。例如
SELECT * FROM `un2co_user_card`
WHERE (nickname = '白小白' or phone = '18606995547')
and is_delete = 1;
现有的方法,为啥不行。主要是索引数组和关联数组,条件之间都是and关系,只能用闭包查询。
$where = [['nickname','=', '小白'], ['phone','=','18612345678']];
$result = Db::name('user_card')
->where(['is_delete'=>1])
->where(function($query) use ($where){$query->whereOr($where);})
->select();
sql:
SELECT * FROM `un2co_user_card` WHERE `is_delete` = 1 AND ( `nickname` = '白小白' OR `phone` = '18606995547' )
正文完
微信扫码打开小程序体验更多功能