Bonjour,
J'essaie une requête avec pas mal de jointures dans une méthode d'une Zend_Db_Table_Abstract :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Application_Model_DbTable_Etudiant extends Zend_Db_Table_Abstract
{
 
    protected $_name = 'th_etudiant_etu';
    protected $_primary = 'etu_id_candidat';
 
    /**
     * inscritStage(String $login)
     * Donne le stage auquel est éventuellement inscrit l'étudiant
     * @param String $login : Identifiant de l'étudiant connecté
     * @return Zend_Db_Table_Row_Abstract : Le stage ou NULL
     */
    public function inscritStage($login)
    {
        /* $select correspond à la requête SQL ci-dessous :
              SELECT ssn.ssn_id, ssn.ssn_libelle, ssn.ssn_date_debut, ssn.ssn_date_fin,
                  e.etb_nom, c.cmn_nom, d.dpt_numero
            FROM th_utilisateur_uti AS u
            LEFT OUTER JOIN tj_cnd_inscrire_ssn_cis AS cis ON cis_id_candidat = u.uti_id_personne
                  LEFT OUTER JOIN te_session_ssn AS ssn ON ssn.ssn_id = cis.cis_id_session
                    INNER JOIN th_stage_stg AS stg ON stg.stg_id_session = ssn.ssn_id
                          INNER JOIN te_etablissement_etb AS e ON e.etb_id = stg.stg_id_etablissement
                            INNER JOIN tr_commune_cmn AS c ON c.cmn_id = e.etb_id_commune
                                  INNER JOIN tr_departement_dpt AS d ON d.dpt_id = c.cmn_id_departement
            WHERE u.uti_login = '$login'
         */
 
        $select = $this->select(Zend_Db_Table::SELECT_WITH_FROM_PART);
        $select->setIntegrityCheck(false);
        $select->from(array('etu'=>$this->_name));
        $select->join(array('uti'=>'th_utilisateur_uti'), 'uti.uti_id_personne = etu.etu_id_candidat');
        $select->joinLeft(array('cis'=>'tj_cnd_inscrire_cis'), 'cis.cis_id_candidat = etu.etu_id_candidat');
        $select->joinLeft(    array('ssn'=>'te_session_ssn'), 'ssn.ssn_id = cis.cis_id_session',
                            array('ssn_id', 'ssn_libelle', 'ssn_date_debut', 'ssn_date_fin')
                        );
        $select->join(array('stg'=>'th_stage_stg'), 'stg.stg_id_session = ssn.ssn_id');
        $select->join(array('etb'=>'te_etablissement_etb'), 'etb.etb_id = stg.stg_id_etablissement', 'etb_nom');
        $select->join(array('c'=>'tr_commune_cmn'), 'c.cmn_id = etb.etb_id_commune', 'cmn_nom');
        $select->join(array('d'=>'tr_departement_dpt'), 'd.dpt_id = c.cmn_id_departement', 'dpt_numero');
        $select->where('uti.uti_login = ?', $login);
 
        return $this->fetchRow($select);
    }
}
D'après mes tests, ça coince à la première jointure externe joinLeft.

On ne peut pas faire de jointure externe de cette façon ?