【发布时间】:2018-03-08 07:50:18
【问题描述】:
我有一个基于某些参数获取用户的查询。
$users = User::where(function($query) use($queryTags_userIDs) {
$query->whereIn('id', $queryTags_userIDs);
})->orWhere(function($query) use($queryImageTitles_userIDs) {
$query->whereIn('id', $queryImageTitles_userIDs);
})->orWhere('username', 'LIKE', "%{$query}%")
->orWhere('keywords', 'LIKE', "%{$query}%")
->orWhere('profile_text', 'LIKE', "%{$query}%")
->orWhere('tagline', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(15);
现在,这一切都很好。
除了这部分:
->where('role', 2)
它不是获取角色为 2 的用户,而是获取每个角色的用户。
但是,如果我去掉一些 orWheres,它会起作用。
如果我摆脱这 3 个 orWheres:
->orWhere('keywords', 'LIKE', "%{$query}%")
->orWhere('profile_text', 'LIKE', "%{$query}%")
->orWhere('tagline', 'LIKE', "%{$query}%")
然后它开始仅获取角色 2 的用户。事实上,无论出于何种原因,这 3 个特定的 orWhere 都会导致问题
如果我将查询减少到只有
$users = User::where('username', 'LIKE', "%{$query}%")
->orWhere('keywords', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(7);
它仍然从角色 2 之外获取用户。
但是,如果要切换到这个:
$users = User::where('username', 'LIKE', "%{$query}%")
->where('role', 2)
->orderBy('last_login', 'desc')
->paginate(7);
然后突然之间它只从角色 2 获取用户。
为什么会这样?我觉得我错过了一些非常明显的东西,因为这没有任何意义。
编辑
为了回应 Bassem El Hachem,我将 role = 2 放在查询的开头。但它仍然不起作用。这是更改后的查询:
"select * from
userswhererole= ? and (idin (?, ?, ?, ?, ?, ?, ?)) 或 (idin (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)) 或 (usernameLIKE ? 或keywordsLIKE ? 或profile_text喜欢?或taglineLIKE ?) 订购last_logindesc"
【问题讨论】:
-
试试我的新答案。其他的
WHERE都是ORs 还是有另外一个强制的WHERE? -
新答案有效。