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);