IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Zend_Db PHP Discussion :

PB de relations entre table [ZF 1.8]


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut PB de relations entre table
    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 ?

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    mise à part une petite erreur dans la déclaration de $_referenceMap ('colums'=>'id_pole' au lieu de 'columns'=>'id_pole'), je ne vois pas pourquoi ça ne marcherait pas. Si tu corriges cette erreur, ça donne quoi ?

  3. #3
    Membre éclairé Avatar de guiyomh
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 328
    Par défaut
    Honte sur moi ! la prochaine fois je regarderais bien la syntaxe.

    ça marche parfaitement. Merci.

    Bon je vais me reposer un peu, car mine de rien ça fais 3 jours que je cherchais se bug. J'en dormais pas la nuit.

    Encore merci.

    As si une question a tout hazard, j'ai pas trouver comment nommé ma class comme je souhaitais. A la palce de Default_Model_DbTable_Pole j'aurais bien souhaiter un truc du genre TPole, TUser ...

    je trouve ça plus simple. Sait tu comment faire ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Access me change mes relations entre tables
    Par karimspace dans le forum Access
    Réponses: 14
    Dernier message: 29/03/2006, 09h57
  2. Relation entre tables dans bdd différentes
    Par Mandotnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/03/2006, 08h03
  3. Les relations entre tables
    Par sheira dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 20/03/2006, 15h03
  4. Récupération des relations entre tables
    Par Themacleod1980 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/02/2006, 11h34
  5. relations entre tables
    Par ilyassou dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 22/11/2005, 07h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo