Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-10-2008 19:40:50

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

[Résolu] [Zend_Db][1.6.1] Where sur table jointe

Je tente de transposer en Zend la requête MySQL suivante :

Code:

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 :

Code:

$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

 

#2 08-10-2008 19:57:37

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] [Zend_Db][1.6.1] Where sur table jointe

Salut,

Essaie ça:

Code:

$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 smile

A+ benjamin.

Dernière modification par Delprog (08-10-2008 19:59:16)


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 09-10-2008 12:22:37

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: [Résolu] [Zend_Db][1.6.1] Where sur table jointe

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 :

Code:

$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

 

#4 09-10-2008 12:26:44

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [Résolu] [Zend_Db][1.6.1] Where sur table jointe

Ok,

Un petit [Résolu] devant ton sujet serait cool smile

A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 09-10-2008 12:40:12

_Raynor_
Membre
Date d'inscription: 11-09-2008
Messages: 28

Re: [Résolu] [Zend_Db][1.6.1] Where sur table jointe

Effectivement http://www.clubic.com/api/forum/img/smiley/jap.gif

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages