|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
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 :
quelqu'un a une idée? merci ! |
||
|
|
00
|
|
|
#2 | ||
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Tu es dans les limites de ce que sait faire le DQL.
Il faut regrouper tous dans un seul andWhere. Code :
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
||
|
10
|
|
|
#3 | |||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
Merci Michel,
j'ai essayé ton code, mais ça ne fonctionne pas j'ai essayé un autre code, mais qui marche à moitié Citation:
Code :
|
|||
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
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.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 | ||
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
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 :
le andWhereIn, c'était pour pouvoir utiliser IN array().. des idées de syntaxe?
|
||
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Ludovic Étudiant Inscription : janvier 2011 Messages : 124 ![]() |
Juste pour information : http://www.doctrine-project.org/proj...n#where-clause
|
|
|
00
|
|
|
#7 |
|
Nouveau Membre du Club
![]() Inscription : mars 2007 Messages : 311 ![]() |
merci pour l'info, mais je trouve pas vraiment la syntaxe qui correspond à mon cas : A AND (B OR C ) , sachant que les valeurs de B et C sont récupérés à partir d'array..
le résultat que j'obtiens correspond à A AND B AND C, est-ce que ça peut venir des suites de innerJoin? |
|
|
00
|
|
|
#8 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Relis mon précédant poste, c'est à mon avis la seule solution.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#9 | ||||||||
|
Membre actif
![]() Fabrice AgnelloDéveloppeur informatique Inscription : octobre 2010 Messages : 76 ![]() |
Bonjour,
comme vous le signale Michel Rotta, vous ne pouvez pas réaliser ce genre de requête avec le fonctionnement par défaut du DQL. Une solution est de définir votre propre classe de query à partir de Doctrine_Query en ajoutant une notion de "nested condition". Une base pour la classe que vous pourrez utiliser est la suivante (nécessitera peut-être d'être retravaillée, car non testée en profondeur): Code php :
son utilisation est alors très simple : Code :
Code php :
avec les paramètres passés dans l'ordre correct attendu : Code php :
HTH. |
||||||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com