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 :

Probleme de "many-to-many Relationship"


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mars 2006
    Messages : 25
    Par défaut Probleme de "many-to-many Relationship"
    Bonjour,

    Depuis hier, je bloque sur un pbme : je cherche à utiliser la methode "Many-to-many Relationship" pour obtenir mes données mais à chaque fois j'ai l'erreur : No reference from table RelationsTermes to table TermesTaxonomies.

    Voila rapidement les 3 tables (et les 3 classes concernées) :
    • Idees => ces sont des idées (éléments centrale de l'appli)
    • RelationsTermes => pt de jointure
    • TermesTaxonomies => des termes qui st des tag ou des catégories (même méthode que wordpress)


    Je cherche donc, à partir d'une idée, à récuperer TermesTaxonomies en passant par la table de jointure RelationsTermes.

    Voici le code SQL
    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
     
    CREATE TABLE IF NOT EXISTS `idee` (
      `id_idee` int(5) NOT NULL auto_increment,
      `date_idee` timestamp NOT NULL default CURRENT_TIMESTAMP,
      `texte_idee` text NOT NULL,
      `titre_idee` varchar(25) NOT NULL,
      `statut_idee` enum('new','old','normal') default 'new',
      `id_mbr` int(5) NOT NULL,
      PRIMARY KEY  (`id_idee`),
      KEY `FK_idee_id_mbr` (`id_mbr`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
     
    CREATE TABLE IF NOT EXISTS `relation_terme` (
      `id_idee` int(5) NOT NULL,
      `id_tt` int(5) NOT NULL,
      PRIMARY KEY  (`id_idee`,`id_tt`),
      KEY `FK_relation_terme_id_tt` (`id_tt`),
      KEY `FK_relation_terme_id_idee` (`id_idee`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE IF NOT EXISTS `terme_taxonomie` (
      `id_tt` int(5) NOT NULL auto_increment,
      `taxonomy_tt` enum('tag','categorie') NOT NULL default 'tag',
      `description_tt` tinytext,
      `count_tt` int(5) default '0',
      `id_terme` int(5) NOT NULL,
      PRIMARY KEY  (`id_tt`),
      KEY `FK_terme_taxonomie_id_terme` (`id_terme`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
     
     
    ALTER TABLE `idee`
      ADD CONSTRAINT `FK_idee_id_mbr` FOREIGN KEY (`id_mbr`) REFERENCES `membres` (`id_mbr`);
     
    ALTER TABLE `relation_terme`
      ADD CONSTRAINT `FK_relation_terme_id_idee` FOREIGN KEY (`id_idee`) REFERENCES `idee` (`id_idee`),
      ADD CONSTRAINT `FK_relation_terme_id_tt` FOREIGN KEY (`id_tt`) REFERENCES `terme_taxonomie` (`id_tt`);
     
    ALTER TABLE `terme_taxonomie`
      ADD CONSTRAINT `FK_terme_taxonomie_id_terme` FOREIGN KEY (`id_terme`) REFERENCES `terme` (`id_terme`);
    Voici les codes PHP

    Idees.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
    15
    16
    17
    18
    19
    20
    21
     
    <?php
    class Idees extends Zend_Db_Table_Abstract
    {
        protected $_rowClass = 'Idee';
     
        protected $_name = 'idee';
        protected $_primary = 'id_idee';
     
        protected $_dependentTables = array( 'RelationsTermes', 'Vote', 'Commentaires');
     
        protected $_referenceMap    = array(
            'Membres'    => array(
                'columns'            => array('id_mbr'),
                'refTablesClass'    => 'Membres',
                'refColumns'        => array('id_mbr')
            )
       );                
    }
     
    ?>
    RelationsTermes.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
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    class RelationsTermes extends Zend_Db_Table_Abstract
    {
        protected $_name = 'relation_terme';
        protected $_primary = array('id_idee','id_tt');
     
        protected $_referenceMap    = array(
            'Idee'                => array(
                'columns'            => array('id_idee'),
                'refTableClass'        => 'Idees',
                'refColumns'        => array('id_idee')
            ),
            'Taxonomy'    => array(
                'columns'            => array('id_tt'),
                'refTablesClass'    => 'TermesTaxonomies',
                'refColumns'        => array('id_tt')
            )
       );
    }
     
    ?>
    TermesTaxonomies.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
    15
    16
    17
    18
    19
     
    <?php
    class TermesTaxonomies extends Zend_Db_Table_Abstract
    {
        protected $_name = 'terme_taxonomie';
        protected $_primary = 'id_tt';
     
        protected $_dependentTables = array('RelationsTermes');
     
        protected $_referenceMap    = array(
            'Termes'    => array(
                'columns'            => array('id_terme'),
                'refTablesClass'    => 'Termes',
                'refColumns'        => array('id_terme')
            )
       );
    }
     
    ?>
    J'espère que quelqu'un pourra trouver un erreur ou juste une idées. Je me casse la tête depuis hier ...

    Nicolas

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2002
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2002
    Messages : 4
    Par défaut
    Bonjour,

    Il ne te manquerait pas des définitions de relations de table dans ta classe RelationsTermes


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    protected $_dependentTables = array( 'Idees', 'TermesTaxonomies');

  3. #3
    Membre expérimenté
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2008
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2008
    Messages : 185
    Par défaut
    Citation Envoyé par nicolas54 Voir le message
    RelationsTermes.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
    15
    16
    17
    18
    19
    20
    21
    22
     
    <?php
    class RelationsTermes extends Zend_Db_Table_Abstract
    {
    	protected $_name = 'relation_terme';
    	protected $_primary = array('id_idee','id_tt');
     
        protected $_referenceMap    = array(
    		'Idee'				=> array(
    			'columns'			=> array('id_idee'),
    			'refTableClass'		=> 'Idees',
    			'refColumns'		=> array('id_idee')
    		),
    		'Taxonomy'	=> array(
    			'columns'			=> array('id_tt'),
    			'refTablesClass'	=> 'TermesTaxonomies',
    			'refColumns'		=> array('id_tt')
    		)
       );
    }
     
    ?>
    Hello .. Une idée à la con, comme ca :
    C'pas important le nom que tu donne dans le tableau ? 'Taxonomy' devrais pas être 'TermesTaxonomies' ? Sinon, tu peux éviter les array() quand ta clef n'a qu'un seul element, ca évite d'avoir des tableaux partout :p
    Sinon, tu fais comment pour apeller ta relation ? parce que faire entre 3 tables .. hmm .. findTermesTaxonomiesViaRelationsTermes() non ?

    Bon courage \o/

Discussions similaires

  1. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  2. probleme HQL pour asso reflexive many-to-many
    Par tridoo dans le forum Hibernate
    Réponses: 3
    Dernier message: 24/11/2006, 14h21
  3. Réponses: 2
    Dernier message: 17/07/2006, 14h45
  4. Réponses: 2
    Dernier message: 30/08/2004, 14h48

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