Laravel 5.3为具有orWhere子句和AND条件的雄辩查询添加括号

时间:2017-02-02 10:57:04

标签: laravel eloquent laravel-5.3

我显然是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但它抛出并且错误"构建器无法转换为字符串错误"。我确信它非常简单,我无法找到它。谢谢

2 个答案:

答案 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();