Débutant à PHP/Laravel ici, alors s'il vous plaît soyez patient.Laravel requête de recherche avec plusieurs conditions
J'ai une page Web qui recherche en fonction de 3 critères pour les chiens, la race, le sexe et le rayon.
est ici le code correspondant:
recherche Page
<div class="col-md-12 zero-pad-left zero-pad-right">
{{ Form::open(array('action' => array('[email protected]'), 'class'=>'form width88', 'role'=>'search', 'method' => 'GET')) }}
<div id="prefetch">
{{ Form::text('search-breed', null, array('class' => 'typeahead form-group form-control', 'placeholder' => 'Search by breed here...')) }}
{{ Form::text('sex', null, array('class' => 'form-group form-control', 'placeholder' => 'Search by sex here...')) }}
{{ Form::text('miles', null, array('class' => 'form-group form-control', 'placeholder' => 'Search by distance here...')) }}
</div>
{{ Form::submit('Search', array('class' => 'btn btn-default search-bar-btn')) }}
{{ Form::close() }}
ControllerPage
class DogsController extends \BaseController {
public function __construct()
{
// call base controller constructor
parent::__construct();
// run auth filter before all methods on this controller except index and show
$this->beforeFilter('auth', array('except' => array('show')));
}
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
if (Input::has('search')) {
$queryString = Input::get('search');
$dogs = Dog::where('name', 'LIKE', "%$queryString%")->orderBy('name')->paginate(5);
}
elseif (Input::has('search-breed'))
{
$dogs = Dog::whereHas('breed', function($q)
{
$queryString = Input::get('search-breed');
$q->where('name', 'LIKE', "%$queryString%");
})->orderBy('name')->paginate(5);
} //end elseif
else {
$dogs = Dog::orderBy('name')->paginate(5);
} //end else
return View::make('dogs.index')->with(array('dogs' => $dogs));
} //end function index()
quand je recherche pour entrer dans une caniche, mâle, dans les 20 miles, l'url montre comme suit:
http://ruff-love.dev/dogs?search-breed=poodle&sex=M&miles=20
La recherche fonctionne actuellement bien lorsque vous recherchez simplement la race.
Je n'arrive pas à comprendre la syntaxe pour ajouter les critères SEX et RADIUS également. il devrait permettre à ces critères d'être nul et toujours effectuer la requête.
des conseils serait grandement apprecaited
cela semble vraiment bon, mais il me semble que vous l'avez mis en place pour trois recherches distinctes race, ou le sexe ou le rayon correct? Ce que j'espérais vraiment, c'était d'avoir une recherche de race (qui fonctionne déjà telle quelle) et d'ajouter ensuite les options de sexe et/ou rayon. J'aime ton code, il est facile de le comprendre à mes yeux novices mais peux-tu le refactoriser pour qu'il le fasse? – rommel109g
Vous vous trompez. Ce qu'il fait est 1 préparer la requête, 2 ajouter chaque filtre qui est nécessaire, 3 obtenir le résultat de la requête construite. En conséquence, vous obtiendrez des chiens correspondant à toutes les contraintes données, grâce aux instructions 'if'. –