TP6数据库查询 where 、or、and

3,313次阅读
没有评论

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' )
正文完
微信扫码打开小程序体验更多功能
post-qrcode
 12
沛霖主页
版权声明:本站原创文章,由 沛霖主页 2022-05-13发表,共计1031字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)