Précédent   Forum des professionnels en informatique > PHP > Outils > Zend > Zend Framework > Zend_Db
Zend_Db Forum d'entraide pour le composant Zend_Db du Zend Framework (création de requêtes, abstraction, ORM etc.). Avant de poster -> FAQ Zend_Db.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/04/2008, 20h58   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2006
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 25
Points : 12
Points : 12
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 :
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 :
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 :
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 :
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
nicolas54 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2008, 10h26   #2
Invité régulier
 
Homme Philippe
Développeur Web
Inscription : avril 2002
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 4
Points : 5
Points : 5
Bonjour,

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


Code :
1
2
 
protected $_dependentTables = array( 'Idees', 'TermesTaxonomies');
Neakdo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2008, 23h36   #3
Membre confirmé
 
Développeur Web
Inscription : 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
Points : 212
Points : 212
Citation:
Envoyé par nicolas54 Voir le message
RelationsTermes.php
Code :
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/
LoveAngel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h34.


 
 
 
 
Partenaires

Hébergement Web