Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Je tente de transposer en Zend la requête MySQL suivante :
SSELECT `adresses`.* FROM `adresses` NATURAL JOIN `utilisateurs` WHERE `utilisateurs`.`compagnie_id` = 8
(qui fonctionne, testée directement sur le serveur via phpMyAdmin sans soucis)
J'ai 3 tables, "adresses" (de PK `adresse_id`), "utilisateurs" (de PK `utilisateur_id`) et "compagnies" (de PK `compagnie_id`).
Un utilisateur appartient à une compagnie (indiqué par la FK `utilisateurs`.`compagnie_id`).
Une adresse appartient à un utilisateur (indiqué par la FK `adresses`.`utilisateur_id`).
Ce qui me donne en Zend :
$adressesTable = new Adresses(); // Mon Zend_Db_Table de la table adresses $select = $adressesTable->select() ->from('adresses') ->joinNatural('utilisateurs', array('compagnie_id')) ->where('utilisateurs.compagnie_id = ?', 8);
Et j'obtiens la Zend_Db_Statement_Mysqli_Exception suivante :
Mysqli prepare error: Unknown column 'adresses.compagnie_id' in 'field list'
Je ne trouve nulle part où dire à Zend_Db que le champ "compagnie_id" du WHERE est dans la table "utilisateurs" (celle jointe).
J'ai essayé sans succès : ->where('compagnie_id = ?', 8)
Merci de votre aide.
Dernière modification par _Raynor_ (09-10-2008 12:39:14)
Hors ligne
Salut,
Essaie ça:
$adressesTable = new Adresses(); // Mon Zend_Db_Table de la table adresses $select = $adressesTable->select() ->joinNatural(array('u' => 'utilisateurs'), array('u.compagnie_id')) ->where('u.compagnie_id = ?', 8);
Je suis plus ou moins convaincu, mais visiblement il cherche le champ compagnie_id dans ta table adresses par défaut.
Aussi détail sans aucun rapport, si tu passes par la méthode de ta classe Adresses ce n'est pas nécessaire de préciser le from
A+ benjamin.
Dernière modification par Delprog (08-10-2008 19:59:16)
Hors ligne
Finalement mon problème venait d'ailleurs : La valeur 8 m'était donné par une méthode d'objet or je l'appelais comme si elle était statique et comme cette méthode faisait elle même une requête, son $this à elle devenait le $this de mon code posant problème (car oui, j'utilisais ce code depuis un Zend_Db_Table) : bref ça s'emmêlait les pinceaux surtout que les même noms de champs était utilisés.
Mon code final est finalement :
$select = $this->select() ->from('adresses') ->joinNatural(array('u' =>'utilisateurs'), array()) ->where('u.compagnie_id = ?', 8);
Merci de ton aide en tout cas (vu que moi je partais du principe que ce code Zend_Db était faux, je n'allait pas chercher ailleurs...)
Dernière modification par _Raynor_ (09-10-2008 12:23:50)
Hors ligne
Ok,
Un petit [Résolu] devant ton sujet serait cool
A+ benjamin.
Hors ligne
Effectivement
Hors ligne
Pages: 1