我显然是laravel的新手,我正在尝试构建此查询
select * from `users` where (`is_enumerator` is not null) and (`firstname` LIKE '%nai%' or `email` LIKE '%nai%' or `id` LIKE '%nai%' or `lastname` LIKE '%nai%' or `county` LIKE '%nai%' or `ward` LIKE '%nai%')
但这就是我得到的
select * from `users` where (`is_enumerator` is not null) and `firstname` LIKE '%nai%' or `email` LIKE '%nai%' or `id` LIKE '%nai%' or `lastname` LIKE '%nai%' or `county` LIKE '%nai%' or `ward` LIKE '%nai%'
使用这个雄辩的查询时
修改 $ query =输入:: get(' search-user'); //来自搜索框
if($query !='') {
$user = User::where(function ($query) {
$query->whereNotNull('is_enumerator');
})->where('firstname', 'LIKE', '%' . $query . '%')
->orWhere('email', 'LIKE', '%' . $query . '%')
->orWhere('id', 'LIKE', '%' . $query . '%')
->orWhere('lastname', 'LIKE', '%' . $query . '%')
->orWhere('county', 'LIKE', '%' . $query . '%')
->orWhere('ward', 'LIKE', '%' . $query . '%')
->get();
}
括号完全更改了查询,没有它们,某些用户会显示搜索查询的结果。我已经尝试了这个链接adding brackets in laravel query但它抛出并且错误"构建器无法转换为字符串错误"。我确信它非常简单,我无法找到它。谢谢
答案 0 :(得分:0)
您可以使用:User::where(function ($query) use ($variable){..
使用use ($variable)
,您可以定义要在查询中使用的变量。
* variable 是您要使用的变量
答案 1 :(得分:0)
你实际上做了正确的事,只是反过来。
现在,您的查询读取
WHERE (is_enumerator IS NOT NULL)
AND firstname LIKE '%...%'
AND email LIKE '%...%'
... and so on
所以你把第一个查询放在一个函数闭包中,它应该真的是第二个。 :)像这样。
$user = User::where(function ($q) use ($query) {
$q->where('firstname', 'LIKE', '%' . $query . '%')
->orWhere('email', 'LIKE', '%' . $query . '%')
->orWhere('id', 'LIKE', '%' . $query . '%')
->orWhere('lastname', 'LIKE', '%' . $query . '%')
->orWhere('county', 'LIKE', '%' . $query . '%')
->orWhere('ward', 'LIKE', '%' . $query . '%');
})
->whereNotNull('is_enumerator')
->get();