Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Doctrine2]Many-many sur soi même donne une table étrange

Sujet résolu
    10 septembre 2012 à 20:38:17

    Bonjour,
    je travaille sur Symfony2 et je commence (avec des amis) à développer un projet qui nous servira par la suite et on désire faire un système d'amis.
    Comme j'utilise FOSUB, j'ai défini un user dans lequel je mets une propriété "friends" et qui met un ManyToMany sur l'user.
    <?php
    class User extends BaseUser
    {
        /**
         * @var integer $id
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
        
        /**
         * @ORM\ManyToMany(targetEntity="Answer42\Bundles\UserBundle\Entity\User")
         */
        private $friends;
        
         public function __construct()
        {
             parent::__construct();
            // Si vous aviez déjà un constructeur, rajoutez juste cette ligne :
            $this->friends = new \Doctrine\Common\Collections\ArrayCollection();
        }
        /**
         * Get id
         *
         * @return integer 
         */
        public function getId()
        {
            return $this->id;
        }
        /**
         *
         * @param \Answer42\Bundles\UserBundle\Entity\User $user l'utilisateur à 
         * mettre en ami 
         * @return \Answer42\Bundles\UserBundle\Entity\User reférence sur l'objet 
         * courant pour chaînage des fonctions
         */
        public function addFriend(\Answer42\Bundles\UserBundle\Entity\User $user){
            $this->friends->add($user);
            return $this;
        }
        /**
         *
         * @param \Answer42\Bundles\UserBundle\Entity\User $user l'utilisateur à 
         * enlever des amis
         * @return \Answer42\Bundles\UserBundle\Entity\User reférence sur l'objet 
         * courant pour chaînage des fonctions
         */
        public function removeFriend(\Answer42\Bundles\UserBundle\Entity\User $user){
            $this->friends->removeElement($user);
            return $this;
        }
        /**
         * @return \Doctrine\Common\Collections\ArrayCollection
         */
        public function getFriends() {
            return $this->friends;
        }
    
    
    }
    


    Puis je mets à jour mon schéma doctrine, et par curiosité je jette un coup d'oeil à ma bdd, en faisans un SHOW COLUMNS FROM user_user
    et là j'obtiens :
    field = user_id
    type = int
    null = no
    key = pri
    default = null
    extra =

    mais rien d'autre : je n'ai aucune trace de clef étrangère etc. Ce qui rend impossible de faire quoi que ce soit.
    Comment puis-je faire? Est-ce un bug de doctrine ou bien une mauvaise config de ma part?
    • Partager sur Facebook
    • Partager sur Twitter
      11 septembre 2012 à 5:02:48

      Salut :)

      Peut-être dois-tu passer par une relation User -> One-To-Many -> UserUser <- Many-To-One <- User (donc une entité relation avec 2 relations ManyToOne vers User)

      Ce qui t'obligerais à concevoir ton entité UserUser à la main.

      J'espère que ça peut t'aider :) En revanche le pourquoi du comment tu te retrouves avec cette table, j'en sais trop rien.
      • Partager sur Facebook
      • Partager sur Twitter
        11 septembre 2012 à 7:20:40

        J'ai bien sûr pensé à cette solution (qui me permettra, en plus d'ajouter certains paramètres à mon système, mais on verra plus tard) mais ça me parait quand même étrange.
        • Partager sur Facebook
        • Partager sur Twitter
          11 septembre 2012 à 8:59:20

          Merci, c'était juste un problème de mot clef dans ma recherche, j'avais pas pensé à "auto référencement" ou "self referencing". Merci.
          • Partager sur Facebook
          • Partager sur Twitter

          [Doctrine2]Many-many sur soi même donne une table étrange

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown