Bonjour je débute avec ZF et j'essaye de faire une relation entre trois table. j'ai suivi le tuto sur le site de Zend : http://framework.zend.com/manual/fr/zend.db.table.relationships.html
en l'adaptant a mon besoin. Voici donc mes tables :
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
 
--
-- Structure de la table `user`
--
 
CREATE TABLE IF NOT EXISTS `user` (
  `id_user` int(11) NOT NULL AUTO_INCREMENT,
  `identifiant` varchar(30) NOT NULL,
  `nom` varchar(30) NOT NULL,
  `prenom` varchar(30) NOT NULL,
  `email` varchar(200) NOT NULL,
  `password` varchar(255) NOT NULL,
  `id_pole` int(11) DEFAULT NULL,
  `id_role` int(11) DEFAULT NULL,
  PRIMARY KEY (`id_user`),
  UNIQUE KEY `identifiant` (`identifiant`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 
--
-- Contenu de la table `user`
--
 
INSERT INTO `user` (`id_user`, `identifiant`, `nom`, `prenom`, `email`, `password`, `id_pole`, `id_role`) VALUES
(1, 'gcamus', 'camus', 'guillaume', 'guillaume.camus@gmail.com', 'cfc5adef048746dac83216290dcead5b', 1, 2),
(3, 'gcamus2', 'camus', 'guillaume', 'guiyomh@yahoo.fr', 'cfc5adef048746dac83216290dcead5b', 2, 3);
 
--
-- Structure de la table `pole`
--
 
CREATE TABLE IF NOT EXISTS `pole` (
  `id_pole` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` varchar(255) NOT NULL,
  PRIMARY KEY (`id_pole`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
 
--
-- Contenu de la table `pole`
--
 
INSERT INTO `pole` (`id_pole`, `libelle`) VALUES
(1, 'portail'),
(2, 'boutique');
 
 
--
-- Structure de la table `role`
--
 
CREATE TABLE IF NOT EXISTS `role` (
  `id_role` int(11) NOT NULL AUTO_INCREMENT,
  `libelle` varchar(255) NOT NULL,
  PRIMARY KEY (`id_role`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
--
-- Contenu de la table `role`
--
 
INSERT INTO `role` (`id_role`, `libelle`) VALUES
(1, 'chef projet'),
(2, 'Chargé de production'),
(3, 'Ressources studio'),
(4, 'Administrateur');
ensuite j'ai créer trois "Zend_Db_Table_Abstract" dont voici le code :
../models/DbTable/User.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class Default_Model_DbTable_User extends Zend_Db_Table_Abstract
{
    /**
     * @var string Name of the database table
     */
    protected $_name = 'user';
    protected $_primary = 'id_user';
 
    protected $_referenceMap = array(
                                    'Pole' => array('colums'=>'id_pole','refTableClass'=>'Default_Model_DbTable_Pole','refColumns'=>'id_pole'),
                                    'Role' => array('colums'=>'id_role','refTableClass'=>'Default_Model_DbTable_Role','refColumns'=>'id_role')
                                    );
}
et ../models/DbTable/Pole.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?php
 
class Default_Model_DbTable_Pole extends Zend_Db_Table_Abstract
{
    /**
     * @var string Name of the database table
     */
    protected $_name = 'pole';
    protected $_primary = 'id_pole';
    protected $_dependentTables = array('Default_Model_DbTable_User');
}
et ../models/DbTable/Role.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<?php
 
class Default_Model_DbTable_Role extends Zend_Db_Table_Abstract
{
    /**
     * @var string Name of the database table
     */
    protected $_name = 'Role';
    protected $_primary = 'id_role';
    protected $_dependentTables = array('Default_Model_DbTable_User');
}
je précise que ce sont des relations simple "1 to 1".
Ensuite j'ai créer mon controler et j'ai mis le code suivant dans indexAction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$TUser = new Default_Model_DbTable_User;
        $userList = $TUser->fetchAll();
        $this->view->userList = $userList;
et je fais ça dans mon template :
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
<table>
    <thead>
        <tr>
            <th scope="col">#</th>
            <th scope="col">prénom</th>
            <th scope="col">nom</th>
            <th scope="col">email</th>
            <th scope="col">pole</th>
            <th scope="col">role</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach($this->userList as $user): ?>
            <tr>
                <td></td>
                <td><?=$user->prenom?></td>
                <td><?=$user->nom?></td>
                <td><?=$user->email?></td>
                <td> <?=$user->findParentRow('Default_Model_DbTable_Pole','Pole')->libelle?> (<?=$user->id_pole?>)</td>
                <td> (<?=$user->id_role?>)</td>
            </tr>
        <?php endforeach; ?>
    </tbody>
</table>
Mais les données qui s'affiche consernant le pole ne sont pas bonne. j'ai bien pour mon premier user le pole 1 et pour le deuxième le pole 2.
Mais lorsque je cherche a afficher le libellé correspondant au pole, il m'affiche que le premier enregistrement de la base. Est ce quelqu'un peu me dire on je me trompe ?