Précédent   Forum du club des développeurs et IT Pro > PHP > Bibliothèques et frameworks > Symfony2 > Doctrine2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/02/2013, 09h40   #1
SurferIX
Membre émérite
 
Avatar de SurferIX
 
Homme Olivier Pons
Ingénieur développement logiciels
Inscription : mars 2008
Messages : 372
Détails du profil
Informations personnelles :
Nom : Homme Olivier Pons
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2008
Messages : 372
Points : 842
Points : 842
Envoyer un message via MSN à SurferIX
Par défaut Autogénération des entités à partir d'un existant : problème avec une relation ManyToMany

Bonjour,

J'ai posé la question ici en anglais, mais personne ne répond, pourtant ma question me semble assez simple...

J'ai une base de données pré-existante, et je veux créer les entités automatiquement avec Doctrine. (Pour la petite parenthèse, Doctrine ne connait pas le type "POINT" de MySQL, j'ai dû les changer en deux colonnes lattitude / longitude).

Je me suis donc servi du tutoriel ici, mais il manque une information et je n'arrive pas à avancer sans.

J'ai une table "personne" et une table "adresse". Une personne peut avoir une ou plusieurs adresses, et une adresse peut être reliée à une ou plusieurs personnes. C'est donc une relation manyToMany.

Dans la documentation, deux manques cruciaux :
  • lorsqu'il y a une relation oneToMany, ils donnent juste une astuce, sans aller plus loin et donner d'exemple concret :
    Citation:
    If you have oneToMany relationships between your entities, you will need to edit the generated xml or yml files to add a section on the specific entities for oneToMany defining the inversedBy and the mappedBy pieces.
  • il n'y a rien concernant les relations manyToMany.

Auriez vous une réponse à l'une des deux interrogations s'il vous plait ?
__________________
Il ne faut pas oublier que la politesse et le respect sont mutuels.

Mon framework Web haute performance :
SurferIX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 11h37   #2
curunir
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 31
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 31
Points : 38
Points : 38
Salut,

je n'ai pas bien compris quelles étaient les interrogations mais pour ce qui est des relations ManyToMany, as-tu consulté la documentation ici ? http://docs.doctrine-project.org/pro...-bidirectional

Si tu pars d'un schéma existant, j'imagine que choisir les noms tables, des champs identifiants et des noms des tables de jointure (JoinTable) dans la définition des Entities et des Associations doit te permettre de démarrer à partir de ton existant.
curunir est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2013, 13h22   #3
SurferIX
Membre émérite
 
Avatar de SurferIX
 
Homme Olivier Pons
Ingénieur développement logiciels
Inscription : mars 2008
Messages : 372
Détails du profil
Informations personnelles :
Nom : Homme Olivier Pons
Âge : 39
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mars 2008
Messages : 372
Points : 842
Points : 842
Envoyer un message via MSN à SurferIX
Bonjour,

Voici comment j'ai résolu mon problème.
En fait la documentation n'est pas correcte, il y a quelques modifications à faire.

Il faut ajouter "@ORM\" au lieu de "@" tout court. Voici un exemple de mon code qui fonctionne :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    /**
     * @ORM\ManyToMany(targetEntity="Adresse", inversedBy="personnes")
     * @ORM\JoinTable(name="personne_adresse")
     **/
    private $adresses;
    /**
     * @ORM\ManyToMany(targetEntity="Partenaire", inversedBy="personnes")
     * @ORM\JoinTable(name="personne_partenaire")
     **/
    private $partenaires;
    /**
     * @ORM\ManyToMany(targetEntity="Telephone", inversedBy="personnes")
     * @ORM\JoinTable(name="personne_telephone")
     **/
    private $telephones;
 
    public function __construct() {
        $this->adresses = new \Doctrine\Common\Collections\ArrayCollection();
        $this->partenaires = new \Doctrine\Common\Collections\ArrayCollection();
        $this->telephones = new \Doctrine\Common\Collections\ArrayCollection();
    }
De plus, il faut supprimer les fichiers Php dans lequels il y a la déclaration des tables ManyToMany correspondantes. Dans mon exemple, supprimer "PersonnePartenaire.php", "PersonneTelephone.php" etc.
__________________
Il ne faut pas oublier que la politesse et le respect sont mutuels.

Mon framework Web haute performance :
SurferIX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 15h36.


 
 
 
 
Partenaires

Hébergement Web