Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous et encore une fois le même sujet
à croire que j'aime bien cette classe.
voici donc le problème cette fois-ci
le problème vient de l'utilisation de sous requête dans la source d'une jointure
SELECT t1_label, t2_label FROM table1 INNER JOIN (SELECT t2_label FROM table2 WHERE condition) AS T2 ON (table1.t2_id = T2.t2_id)
pour faire cela avec Zend_Db_Select il faut écrire ceci
$db->select() ->from ('table1', array('t1_label') ->joinInner( array('T2' => new Zend_Db_Expr ( '('. $db->select() ->from('table2', array('t2_label')) ->where('condition') .')' )), 'table1.t2_id = T2.t2_id', array('t2_label') )
il est possible de de trouver d'autres syntaxes mais en gros voilà le principe.
mais le code généré pour la sous requête va être
SELECT `table2`.`t2_label` FROM `table2` WHERE condition
l'expression est donc
(SELECT `table2`.`t2_label` FROM `table2` WHERE condition)
mais Zend_Db_Select va chercher dans cette chaine le motif shemas.tablename
il va donc couper la chaine en deux et la quoter ainsi
`(SELECT ``table2```.```t2_label`` FROM ``table2`` WHERE condition)`
le bug se trouve donc ligne 360
if (false !== strpos($tableName, '.')) { list($schema, $tableName) = explode('.', $tableName); }
il faut tenir compte du fait que la source de la jointure puisse être une expression
if (!$tableName instanceof Zend_Db_Expr && false !== strpos($tableName, '.')) { list($schema, $tableName) = explode('.', $tableName); }
ce bug se produit dès que la source est une formule contenant un .
A+JYT
Hors ligne
Merci sekaijin pour le report de ce bug.
Je tiens à t'informer qu'un bug du style a déja été reporté(ZF-1856), les corrections sont donc en cours ;-)
Hors ligne
merci de l'info
il me faudrait un peu de temps pour lire tous les bug ouvert
j'ai préféré signaler immédiatement.
A+JYT
Hors ligne
Mais notre communauté sert aussi à ca.
J'ai un accès CLA au projet, je peux donc remonter, ou corriger, les bugs trouvés par les francophones ;-)
Aucun souci
Hors ligne