我有一个基于某些参数提取用户的查询。Laravel where子句无法在系列或其他地方工作
$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个特定orWheres是,不管是什么原因,导致该问题
如果我减少查询只
$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哈希姆,我把角色= 2在查询的开始。但它仍然不起作用。这里是变更后的查询:
“从
users
选择*其中role
=和(在id
(,,,,, )???????)或(id
在(? ,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?))或(username
LIKE?或keywords
???LIKE或profile_text
LIKE或tagline
等),以便通过last_login
desc”的
试试我的新答案。另一个'WHERE'全部是'OR's还是有另一个强制性的WHERE? –
新答案有效。 –