Laravel 4 Laravel-clausole未按预期工作的地方

Laravel 4 Laravel-clausole未按预期工作的地方,laravel-4,Laravel 4,我有一个小的搜索表单,允许用户通过id或first\u name,last\u name搜索他的客户 在我的数据库中,first_name和last_name位于两个单独的列中,因此当我尝试按名称搜索客户机时,我需要使用一个同时检查这两个列的查询 这是我的代码: //Recupero l'utente corrente $current_user = Auth::user()->id; //Preparo la query $query =

我有一个小的搜索表单,允许用户通过
id
first\u name,last\u name
搜索他的客户

在我的数据库中,
first_name
last_name
位于两个单独的列中,因此当我尝试按名称搜索客户机时,我需要使用一个同时检查这两个列的查询

这是我的代码:

//Recupero l'utente corrente
        $current_user = Auth::user()->id;

        //Preparo la query
        $query = DB::table('clients');

        //Recupero l'eventuale nome e ID di ricerca cliente
        $client_id = Input::get('client_id');
        $client_name = Input::get('client_name');

        //Controllo se devo fare una ricerca per ID
        if(  is_numeric($client_id) )
        {
            $query->where('id', '=', $client_id);
        }
        elseif( trim($client_name) != "" )
        {
            //Controllo se invece ho il nome
            $query->where('nome', 'LIKE', "%$client_name%")->orWhere('cognome', 'LIKE', "%$client_name%");
        }       

        //Recupero i clienti
        $data['clients'] = $query->where('id_agente', $current_user)->paginate(10);
第一个
if
将检查用户是否通过
ID
选择客户端,而第二个需要检查名称和姓氏

问题是在第二种情况下,忽略最后一个
,其中
,并返回表中与输入匹配的所有结果,因此我可以看到其他用户的数据


如何修改我的代码,以便始终考虑
where('id\u agent',$current\u user)

elseif
部分中,只需替换以下行:

$query->where('nome', 'LIKE', "%$client_name%")->orWhere('cognome', 'LIKE', "%$client_name%");
为此:

$query->where(function($q) use ($client_name) {
    $q->where('nome', 'LIKE', "%$client_name%")
      ->orWhere('cognome', 'LIKE', "%$client_name%");
});

将闭包传递给
elseif
中的
where()

elseif( trim($client_name) != "" )
{
    $query->where(function($subQuery) use ($client_name){
        $subQuery->where('nome', 'LIKE', "%$client_name%");
        $subQuery->orWhere('cognome', 'LIKE', "%$client_name%");
    }};
}       

$data['clients'] = $query->where('id_agente', $current_user)->paginate(10);
或者。。简化整个脚本:

$client_id = trim(Input::get('client_id'));
$client_name = trim(Input::get('client_name'));

if(empty($client_id) && empty($client_id))
    return false;

$data['cleints'] = DB::table('clients')
->where((!empty($client_id)) ? function($q) use ($client_id){
    $q->where('id', '=', $client_id)->first();
} : function($q) use ($client_name) {
    $q->where('nome', 'LIKE', "%$client_name%");
    $q->orWhere('cognome', 'LIKE', "%$client_name%");
})->where('id_agente', Auth::user()->id)
->paginate(10);