2 votes

Fonction de recherche Laravel query builder

Je suis en train d'essayer d'écrire une fonction qui gère une requête de recherche pour mon site web

J'ai un champ appelé 'unique' qui a une valeur vraie ou fausse pour cette recherche. Parce que cette page va lister des résultats non uniques, j'en ai besoin comme par exemple 'unique', '!=', true

j'ai 2 autres champs nom, description donc lorsque vous effectuez une recherche, les résultats attendus sont renvoyés

J'ai écrit le code ci-dessous mais si je clique sur le bouton de recherche sur la page, il listera tous les résultats indépendamment du champ unique étant vrai ou faux et si je recherche un nom ou une description qui renvoie des résultats en ignorant le champ unique.

    $films = Film::when($request->input('unique'), function ($query) {
        $query->where('unique', '!=', true);
    })
        ->where('name', 'like', "%$search%")
        ->orWhere('description', 'like', "%$search%")
        ->get();

Je ne suis pas très compétent en ce qui concerne les requêtes eloquent, donc je pourrais manquer quelque chose ici.

Résumer la fonctionnalité dont j'ai besoin : Si je recherche sans entrer de valeur dans le champ de recherche, ne retourner que les enregistrements ayant unique comme VRAI et si je recherche un nom ou une description dans le champ de texte, ne retourner que les enregistrements correspondant à la saisie et ayant unique comme VRAI.

Tout retour serait génial, merci !

1voto

wschopohl Points 1326

Je ne suis pas sûr d'avoir compris votre question, mais est-ce que ceci pourrait être une solution à votre problème :

$filmQuery = Film::where('unique', false);
if($search !== "") {
   $filmQuery = $filmQuery->where(function ($query) {
       $query->where('name', 'like', "%$search%")
       ->orWhere('description', 'like', "%$search%");
   });
}
$films = $filmQuery->get();    

Cela devrait vous permettre d'obtenir tous les films dont le champ 'name' ou 'description' correspond à votre variable $search et qui ont également 'unique' === false.

Et si $search === "" (vide), vous devriez obtenir tous les films où 'unique' === false.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X