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裏面的條件是 | | 的關係,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章