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 :
ensuite j'ai créer trois "Zend_Db_Table_Abstract" dont voici le code :
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');
../models/DbTable/User.php
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
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/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_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'); }
je précise que ce sont des relations simple "1 to 1".
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'); }
Ensuite j'ai créer mon controler et j'ai mis le code suivant dans indexAction :et je fais ça dans mon template :
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;
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.
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 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 ?
Partager