雄辩的分组或在哪里

时间:2015-12-09 23:12:46

标签: php laravel-5 eloquent

目前有一个Eloquent声明:

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

将其视为

select 
    * 
from 
    contacts 
where 
    lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    and active = 1

我需要的是

select 
    * 
from 
    contacts 
where 
    (lname like $searchquery+'%' 
    or lname like $searchquery+'%' 
    or lname like $searchquery+'%') 
    and active = 1

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

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

但我只习惯Eloquent,而不是Laravels DB Query构建器。我尝试将Eloquent表单改编为此

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

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

我错过了什么?

2 个答案:

答案 0 :(得分:1)

所以,这就是你要做的事情:

a='2015-09-08 14:38:03';
s=strsplit(a,{'-',':',' '})
x=datenum(cellfun(@str2num,s(1:end)))

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

答案 1 :(得分:0)

当你使用orWhere多个where子句时,你需要小心!

orWhere之后的条款不会影响<{>} orWhere条款之前的条款,例如where,{{ 1}},whereHaswhereDoesntHave

你也必须使用orWhereHas

$searchquery变量传递给where子句中的函数
use ($searchquery)