thinkphp中where与whereOr混写的问题

更新时间:2023-05-25 21:55
刚学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里面的条件是 | | 的关系,