雄辩分组 orWhere

Kei*_*ark 5 php eloquent laravel-5

目前有一个雄辩的说法:

$contacts = Contacts::where('lname','LIKE',$searchquery.'%')
    ->orWhere('fname','LIKE',$searchquery.'%')
    ->orWhere('phone','LIKE','%'.$searchquery)
    ->where('active','=',1)->get();
Run Code Online (Sandbox Code Playgroud)

它正在将其视为

select 
    * 
from 
    contacts 
where 
    lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    and active = 1
Run Code Online (Sandbox Code Playgroud)

我需要的是

select 
    * 
from 
    contacts 
where 
    (lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    or lname like $searchquery+'%') 
    and active = 1
Run Code Online (Sandbox Code Playgroud)

如何在 Eloquent 中进行分组?我发现了几个例子,例如:

DB::table('users')
        ->where('name', '=', 'John')
        ->orWhere(function ($query) {
            $query->where('votes', '>', 100)
                  ->where('title', '<>', 'Admin');
        })
        ->get();
Run Code Online (Sandbox Code Playgroud)

但我只习惯 Eloquent,而不习惯 Laravels DB 查询构建器。我尝试调整 Eloquent 形式来适应这个

$contacts = Contacts::->where('active', '=', '1')
        ->where(function ($query) {
            $query->orWhere('lname', 'LIKE', $searchquery.'%')
                  ->orWhere('lname', 'LIKE', $searchquery.'%')
                  ->orWhere('phone', 'LIKE', '%'.$searchquery);
        })
        ->get();
Run Code Online (Sandbox Code Playgroud)

没有成功,因为它无法识别$searchquery函数内部。

我缺少什么?

小智 4

所以,这就是你必须做的:

DB::table('users')->where(function($query) use ($searchQuery){
                                $query->where('lname', 'LIKE', $searchQuery . '%')
                                      ->orWhere('fname', 'LIKE', $searchQuery . '%')
                                      ->orWhere('phone','LIKE', '%' . $searchquery);
                          })
                          ->get();
Run Code Online (Sandbox Code Playgroud)

请注意,我已经使用了 use ($searchQuery),因此可以在闭包内使用它