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