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

Doctrine2 PHP Discussion :

relation many-to-many bidirectional complète


Sujet :

Doctrine2 PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut relation many-to-many bidirectional complète
    Bonjour,

    j'essai de créer des relaltion many-to-many-bidirectional dans un projet symfony2.
    en suivant les instructions données par doctrine2 (lien) j'arrive bien à créer une relation qui permet l'accès dans un sens comme dans l'autre. En revanche quand je veux administrer la base (par exemple avec le CRUD par défaut), j'ai d'un coté l'accès à une liste de choix multiple et de l'autre coté rien.
    Par exemple si je prends 2 tables "Users" et "Discussion", en effectuant le CRUD sur "Discussion" je vois l'ensemble des utilisateurs qui ont participé à la discussion et je peux les sélectionner. En revanche en faisant le CRUD sur "Users" je ne peux pas sélectionner les discussions auquel il a participé.

    j'ai résolu le problème en changeant le paramétrage par annotations donné par la doc doctrine :
    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
     
    //dans l'entity Discussion:
        /**
         * @var Users
         * @ORM\ManyToMany(targetEntity="User", inversedBy="discussions")
         * @JoinTable(name="users_discussions")
         */
        private $users;
     
    //dans l'entity User:
        /**
         * @var Discussions
         * @ORM\ManyToMany(targetEntity="Discussion", mappedBy="users")
         */
        private $discussions;
    en :
    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
     
    //dans l'entity Discussion:
        /**
         * @var Users
         * @ORM\ManyToMany(targetEntity="User", inversedBy="discussions")
         * @JoinTable(name="users_discussions")
         */
        private $users;
     
    //dans l'entity User:
        /**
         * @var Discussions
         * @ORM\ManyToMany(targetEntity="Discussion", inversedBy="users")
         * @JoinTable(name="users_discussions")
         */
        private $discussions;
    ca fonctionne bien pour le CRUD mais ca crée une erreur si je veux générer le schéma (et en plus je pense que ca n'est pas très propre...)

    quelqu'un aurait-il une solution ??

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Salut.

    Je ne peux que te conseiller de regarder la documentation de Doctrine2 :
    http://www.doctrine-project.org/docs...-bidirectional

    Perso je fais toujours le mapping en YML, mais je pense qu'il faut que tu précises la colonne qui permet de faire la jointure avec l'attribut joinColumns de ton "owning side", c'est-à-dire du côté User (enfin c'est à toi de voir).

  3. #3
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    même en spécifiant joinColumns je rencontre le même problème (j'ai créé spécialement un projet pour tester cette problématique sans autres interactions mais ca ne change rien)

    pour préciser mon problème : dans mon CRUD Users je peux voir les différentes Discussions et les sélectionner mais lorsque j'enregistre l'User les modifications ne sont pas prises en compte..

    je trouve mon problème assez étonnant car il doit se pose à pas mal de monde (c'est basique) et je ne trouve aucune info...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2004
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 318
    Points : 362
    Points
    362
    Par défaut
    Si c'est un problème d'enregistrement, as-tu essayé de mettre un cascade: persist, sur ta relation User -> Discussion ?

  5. #5
    Membre du Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2011
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2011
    Messages : 53
    Points : 62
    Points
    62
    Par défaut
    après de nombreuses recherche j'ai trouvé la solution

    c'est cascade: persist qui m'a mis sur la voie même si ce n'est pas la solution.

    en fait il faut procéder en 2 étapes :
    1. configurer 'by_reference' à false dans les formulaire concernés
    2. ajouter des fonctions set sur l'entity qui ne fonctionne pas avec un code dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public function setUtilisateurs(\Doctrine\Common\Collections\Collection $utilisateurs)
        {
            foreach ($this->utilisateurs->getSnapshot() as $utilisateur){ // On parcours les anciens utilisateurs liés
                $utilisateur->getobjectifs()->removeElement($this);   
            }
     
            $this->utilisateurs = $utilisateurs;
            foreach ($this->utilisateurs as $utilisateur){
                $utilisateur->addObjectif($this);
            }
        }
    c'est un peu rapide mais si quelqu'un est intéressé par plus de détail, répondez sur ce fil...

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 11
    Points : 15
    Points
    15
    Par défaut
    Merci d'avoir partager la solution, elle m'aura servit 2 ans plus tard
    Il ne me manquait que le getSnapshot pour que tout fonctionne.....

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

Discussions similaires

  1. PGSQL-EclipseLink Relation One To Many et Many To One
    Par faitor1 dans le forum Persistance des données
    Réponses: 0
    Dernier message: 30/01/2015, 19h46
  2. 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
  3. [hibernate] relation one-to-many avec plusieurs clés
    Par seb_fou dans le forum Hibernate
    Réponses: 6
    Dernier message: 16/03/2006, 14h47
  4. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07
  5. [EJB2.1 Entity] [CMR] Relation One to Many
    Par hamed dans le forum Java EE
    Réponses: 2
    Dernier message: 31/12/2003, 14h26

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