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

回到顶部