IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

Requete multi criteres via Eloquent ou Query Builder


Sujet :

Laravel PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut Requete multi criteres via Eloquent ou Query Builder
    Bonjour à tous et à toutes,

    Je sollicite votre aide puisque malgré le fait que je commence à me débrouiller en Laravel, je suis confronté à un blocage.

    Dans une de mes applications, je souhaiterais créer un moteur de recherche dynamique qui se base sur plusieurs critères, je m'explique...

    Je cherche a mettre au point une interface de recherche de dossiers techniques que nous appelons chez nous des "MODS".
    Et j'aimerais leur laisser la possibilité de chercher ces 'MODS' par un ou plusieurs critères (Demandeur, sujet, numéro etc...) voir la capture ci-dessous :
    Nom : capture_mods.JPG
Affichages : 1746
Taille : 30,5 Ko

    En gros, je souhaiterais qu'un utilisateur puisse chercher des "MODS" par demandeur et/ou par numéro, et/ou par sujet etc, je pense que vous avez compris l'idée.
    En gros un systeme qui prendra un compte tous les critères qui seront demandés par les utilisateurs.

    C'est la ou je coince, je sais faire une requête avec un ou plusieurs critères mais je ne sais pas faire des requêtes dynamique via LARAVEL.
    En PHP Natif j'aurais su construire une requête BRUTE, mais avec LARAVEL je sèche complètement...

    NB : j'ai testé la méthode INTERSECT mais sans succès car mes requêtes ne renvoient pas de collections...

    NB2 : j'en profite pour préciser que mes requêtes sont traitées via AJAX.

    Pourriez vous s'il vous plait me donner des idées sur comment arriver à faire cette interface Multi-critères ?

    Je vous remercie par avance pour votre réponse.

  2. #2
    Membre émérite
    Avatar de Happy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2005
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Autre

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2005
    Messages : 665
    Par défaut
    Si tu comprends l'anglais, tu peux visionner cette vidéo :

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    Bonjour,

    pourquoi ne pas envoyer une requête ajax GET du type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /mods?demandeur=1&num=458&subject=foobar
    Puis côté backend, tester la présence des attributs et construire la bonne requête via Query Builder ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Bonsoir,

    Je vous remercie pour vos réponses très intéressantes.

    J'ai finalement trouvé la solution et tout compte fait la connerie venait de mon code.

    En fait je n'avais pas terminé mes requetes par "->get()" et du coup je n'obtenais pas de collections.
    J'ai corrigé mon code et j'ai reussi a retourner des collections, et par conséquent en passant par la méthode INTERSECT j'ai reussi a faire ce que je voulais faire.

    Voici le code que j'ai fait et qui fonctionne puisque je l'ai testé. Pour faire simple je vérifie chaque critère et s'il existe je fais une requete précise sinon je cherche toutes les entrées.
    Je n'ai sans doutes pas fait la méthode la plus simple mais elle a le mérite d'exister.

    On ne sait jamais ca pourrait servir à quelqu'un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
            //requete recherche si le demandeur de mod est renseigné
            if (isset($request->demandeur_mod) && $request->demandeur_mod != '') 
            {
                $modsParDemandeur = mod::where('demandeur',$request->demandeur_mod)->get();
            }else {
                $modsParDemandeur = mod::where('demandeur','!=','')->get();
            }
     
            //requete recherche si le numero de la MOD est renseigné
            if (isset($request->numero_mod) && $request->numero_mod != '') 
            {
                $modsParNumero = mod::where('numero',$request->numero_mod)->get();
            }else {
                $modsParNumero = mod::where('numero','!=','')->get();
            }
     
            //requete recherche si le sujet de la MOD est renseigné
            if (isset($request->sujet_mod) && $request->sujet_mod != '') 
            {
                $modsParSujet = mod::where('objet','like','%'.$request->sujet_mod.'%')->get();
            }else {
                $modsParSujet = mod::where('objet','!=','')->get();
            }
     
            //requete recherche si le sujet de change BC a été renseigné
            if (isset($request->num_change_bc_mod) && $request->num_change_bc_mod != '') 
            {
                $modsParChange = mod::where('change_bc',$request->num_change_bc_mod)->get();
            }else {
                $modsParChange = mod::where('change_bc','!=','')->get();
            }
     
            //requete recherche si un SNS-REFS a été renseigné
            if (isset($request->sns_refs_mod) && $request->sns_refs_mod != '') 
            {
                $modsParSNS= mod::where('sns_refs','like','%'.$request->sns_refs_mod.'%')->get();
            }else {
                $modsParSNS = mod::where('sns_refs','!=','')->get();
            }
     
            $intersect = $modPerimetre
                        ->intersect($modsParNumero)
                        ->intersect($modsParSujet)
                        ->intersect($modsParChange)
                        ->intersect($modsParSNS);
     
            $intersect->all();
     
            return $intersect;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Par défaut
    Salut.

    A savoir que tu n'es pas obligé d'utiliser la méthode get() dans ta condition, ce qui est bien pratique pour simplifier tes conditions et pouvoir gérer des scénarios plus complexe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $test = Table::where('id','!=','')
     
    If(condition)
       $test->where()
    If(condition2)
     $test->where()
    Etc...

    Puis tu demande le résultat

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur BackEnd - FrontEnd
    Inscrit en
    Avril 2015
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur BackEnd - FrontEnd
    Secteur : Services de proximité

    Informations forums :
    Inscription : Avril 2015
    Messages : 90
    Par défaut
    Bonjour,

    Je ne savais pas dis donc, merci de m'avoir appris quelque chose.

    Je dormirais moins bête ce soir encore une fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] requete multi-critere provenant d'un tableau
    Par nicolasferraris dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/03/2009, 09h36
  2. langage hql et requete multi critere
    Par pascal007 dans le forum Hibernate
    Réponses: 8
    Dernier message: 06/12/2007, 19h51
  3. [SQL] Création de requête multi critères
    Par gojaru dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 29/11/2006, 09h50
  4. Recherche Multi Criteres Refresh Query
    Par mamama dans le forum Access
    Réponses: 5
    Dernier message: 26/10/2006, 09h13
  5. [MySQL] ecriture d'une requête multi-critères
    Par webdestination dans le forum Langage SQL
    Réponses: 1
    Dernier message: 16/08/2006, 11h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo