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