2017-10-09 4 views
1

Actuellement, j'utilise nicolaslopezj/searchable pour ma recherche laravel.Quelle est la meilleure façon d'implémenter la recherche et le filtrage dans un code simple?

La recherche est bonne, mais je veux ajouter aussi un filtre sur elle et mon filtre comme le sexe, la classe ou l'emplacement.

Par exemple, dans ce cas:

1 --- Jane Doe --- --- F Classe A --- USA

2 --- John Doe --- M --- classe B --- PH

mon code actuel est quelque chose comme ceci:

if (isset ($keyword)) 
$voters = Voter::search($request->keyword)->paginate(10); 

if (isset ($keyword) && isset($request->sex)) 
$voters = Voter::search($request->keyword)->where('sex', $request->sex)->paginate(10); 

if (!isset($keyword) && isset($request->sex)) 
$voters = Voter::where('sex', $request->sex)->paginate(10); 

if(isset($keyword && !isset($request->sex) 
$voters = Voter::search($request->keyword)->paginate(10); 

Ainsi, toute idée comment minimiser beaucoup de conditions? Existe-t-il un code/une requête à un interligne pour cela?

Répondre

0

votre code I optimisé:

$voters = Voter::on(); 

if (isset ($request->keyword)) 
    $voters = $voters->search($request->keyword); 

if (isset($request->sex)) 
    $voters = $voters->where('sex', $request->sex); 

$voters = $voters->paginate(10); 
1

vous pouvez utiliser la méthode Model::query() et Request::has() pour vérifier la demande .. par exemple ..

$voters = Voter::query(); 

if ($request->has('keyword')) 
    $voters = $voters->search($request->keyword); 

if ($request->has('sex')) 
    $voters = $voters->where('sex', $request->sex); 

$voters = $voters->paginate(10);