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

Symfony PHP Discussion :

requête doctrine: probleme d'exécution andWhereIn et orWhereIn


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut requête doctrine: probleme d'exécution andWhereIn et orWhereIn
    Bonjour,
    j'ai un souci avec l'exécution d'une requête utilisant les "andWhereIn" et "orWhereIn", j'ai pas vraiment le résultat que je veux obtenir.

    ce que je voudrais faire c'est : A and (B or C or D) sachant que les valeurs de B, C et D se trouvent en array, voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$this->articles = Doctrine::getTable('article')->createQuery('a')
           ->where('a.fournisseur = ?', 'ldt') // représente A
            ->innerJoin('a.Coordonnes p' )
    	  ->innerJoin('a.Codes m' )
          ->innerJoin('a.Symboles g' )
          ->andWhereIn('p.nom', array(...,..,..,...)) // représente B
        ->orWhereIn('m.code', array(..,..,..,...)) // représente C
        ->orWhereIn('g.symbole', array(..,..,..,...)) // représente D
    le résultat de ce code ne prend pas en compte la condition " ->where('a.fournisseur = ?', 'ldt')",
    quelqu'un a une idée?

    merci !

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Tu es dans les limites de ce que sait faire le DQL.

    Il faut regrouper tous dans un seul andWhere.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ->andWhere('p.nom IN :nom: AND (m.code IN :code: OR g.symbole IN :sym:', array( ':non:' => array(...), ':code:' => array(...), ':sym:' => array(...) )
    Je sais que cela marche avec des string, je suppose avec des IN et des array, mais à essayer.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    Merci Michel,
    j'ai essayé ton code, mais ça ne fonctionne pas il y a des erreurs pour les ":nom:"...
    j'ai essayé un autre code, mais qui marche à moitié ,

    $noms = array(....);
    $cod = array(..........);
    $sym = array(.........);

    $this->articles = Doctrine::getTable('article')->createQuery('a')
    ->innerJoin('a.Coordonnes p' )
    ->innerJoin('a.Codes m' )
    ->innerJoin('a.Symboles g' )
    ->andWhere('a.fournisseur = ?', 'ldt')
    ->andWhereIn("(p.nom IN $noms OR
    m.code IN $cod OR g.symbole IN $sym )AND TRUE")
    en fait dans la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ->andWhereIn("(p.nom IN $noms OR 
         m.code IN $cod OR g.symbole IN $sym )AND TRUE")
    c'est plus un AND qu'il me fait à la place des OR

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    A bien y réfléchir, mon code ne peut pas fonctionner, il ne comprendrait pas les IN et ne pourrait générer correctement le SQL à partir des array...

    Je ne comprend pas ton code dans le andWhereIn(), ni pourquoi tu lui rajoute un "AND TRUE" qui n'apporte pas grand chose.

    Je ne vois, là, qu'une solution. L'utilisation d'un andWhere() (et pas d'un andWhereIn() ) qui sera la représentation complète de ce que tu veux, à toi de créer l'ensemble de la string qui sera ta requête, à toi aussi de vérifier que les données dans les tableaux ne peuvent embarquer de code d'injection sql.

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2007
    Messages
    334
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 334
    Par défaut
    le problème c'est que je trouve pas suffisamment de doc sur les requêtes doctrine avec l'utilisation à la fois de andWhere et orWhere, j'ai essayé plein de choses, j'arrive pas à trouver la bonne syntaxe.
    dernier essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .......
    ->andWhere('a.fournisseur = ?', 'ldt')
    ->andWhere('g.symbole = ?', $sym OR 'm.code = ?' $cod)
    --> Erreur: Parse error: syntax error, unexpected T_VARIABLE ...
    le andWhereIn, c'était pour pouvoir utiliser IN array()..

    des idées de syntaxe?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 124

Discussions similaires

  1. [2.x] Requête doctrine s'exécutant 4 fois dans un listener
    Par Marcuss57 dans le forum Symfony
    Réponses: 2
    Dernier message: 25/08/2014, 00h45
  2. Probleme d'exécution de KeyListener
    Par aur0re dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 25/04/2007, 20h26
  3. requête select ne s'exécute pas ?
    Par jessy212 dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 25/08/2006, 08h27
  4. Probleme à l'exécution avec DevIL
    Par Copros dans le forum DevIL
    Réponses: 9
    Dernier message: 08/05/2006, 16h10
  5. [ struts ] probleme à l'exécution
    Par flogreg dans le forum Struts 1
    Réponses: 12
    Dernier message: 23/08/2004, 12h11

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