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里面的条件是 | | 的关系,