Bonjour à tous.
Pour vous placer un peu dans le contexte, dans mon application j'ai une vue qui va lister des fiches qui ont été au préalable enregistrées. Sauf qu'à un moment il est possible que j'ai une centaine de fiches qui soient affichées, du coup j'ai besoin de les trier.
J'ai un formulaire au dessus de ma liste de fiches, et j'aimerais qu'en cliquant sur le formulaire, la page se recharge avec une requête SQL du genre "select * from matable where (insérer les valeurs rentrées dans le formulaire plus tôt)", et que du coup ma liste de fiche s'actualise et soit triée.

Le problème, c'est que je suis encore novice et que je ne sais pas trop où chercher pour avoir une aide correspondant précisément au problème que j'ai, en suivant un tuto j'ai essayé d'utiliser un scope en partant de mon modèle et de l'appeller :

public function scopeSearch($query, $largeur, $hauteur, $diametre){

        return $query->where('largeur', $largeur)->where('hauteur', $hauteur)->where('diametre', $diametre);

    }
public function search(Request $request){

        $pneus = Pneu::distinct()->select('largeur', 'hauteur', 'diametre')->get();
        $saisie = Saisie::search($request->largeur, $request->hauteur, $request->diametre);

        return view('recherche.recherche', compact('pneus', 'saisie'));

    }

Mais au chargement de la page aucune requête ne s'effectue, et quand j'actualise la page, le formulaire s'actualise de nouveau (la faute au return view je pense, mais je n'ai pas encore trouvé comment faire autrement)

Du coup, j'aimerais savoir si vous aviez des idées qui me permettraient de comprendre quoi faire ou des aides pour le faire.

Merci d'avance !

(Si vous avez besoin d'autres bouts de code prévenez moi)

2 réponses


iGenezys
Auteur
Réponse acceptée

Up.
J'ai un peu changé ma fonction Search, elle est comme ça à présent :

public function search(Request $request){

        $pneus = Pneu::distinct()->select('largeur', 'hauteur', 'diametre')->get();
        $largeur = $request->input('largeur');
        $hauteur = $request->input('hauteur');
        $diametre = $request->input('diametre');

        $saisie = Saisie::search($largeur, $hauteur, $diametre)->get();

        return view('recherche.recherche', compact('pneus', 'saisie'));

    }

Quand je fais un dd de hauteur, diametre, largeur j'ai les valeurs que j'ai mis dans le formulaire.

Maintenant, quand je clique sur le bouton de recherche du formulaire, j'ai une erreur du type :

ErrorException in Grammar.php line 118:
Argument 1 passed to Illuminate\Database\Grammar::parameterize() must be of the type array, string given

En regardant un peu sur internet j'ai vu sur certain sites que mettre un whereIn dans le scope corrigeais l'erreur, mais ça n'a rien fait pour moi.
Je ne met pas le code de mon scope c'est le même que celui plus haut.

Avez vous des idées pour régler cette erreur ?

Bonjour, pour commencer montre ton formulaire de recherche, après pour ton where essai de passer les paramètres sous forme de tableau comme

public function scopeSearch($query, $largeur, $hauteur, $diametre){

        return $query->where(['largeur',=>$largeur, 'hauteur',=>$hauteur, 'diametre'=> $diametre]);

    }