thinkphp中where与whereOr混写不能带括号的问题
刚学thinkphp6,在写一段功能中需要用到以下语句:
$where[] = ["level", "=", 1];$where[] = ["level", "=", 2];
$user = UserModel::where("username",1)->whereOr($where)
->select();
理想中的sql应该为:
^ "SELECT * FROM `tp_user` WHERE `username` = 1 and (`level` = 1 OR `level` = 2")
但实际的SQL语句为:
^ "SELECT * FROM `tp_user` WHERE `username` = 1 OR `level` = 1 OR `level` = 2"
解决:遇到whereOr和where组合链式操作使用闭包条件统一写到闭包里面 会自动加上括号.
改写链式查询条件为以下:
$user = UserModel::where(function ($query) use ($where) {$query->whereOr($where)
})
->select();
原因分析:
where里面的条件是 && 的关系,whereOr里面的条件是 | | 的关系,
以上是 thinkphp中where与whereOr混写不能带括号的问题 的全部内容, 来源链接: utcz.com/z/517918.html