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 entre entités dans différents bundles


Sujet :

Doctrine2 PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Relation entre entités dans différents bundles
    Bonjour à tous.

    J'ai suivi les deux tutoriels d'introduction à symfony 2 proposés par djayp et je dois dire qu'ils m'ont vraiment beaucoup aidé. Je tiens à le remercier encore une fois pour ça.

    Je suis débutant en php et maintenant que j'essaie de faire les choses par moi même il y a tout de suite plus de problèmes...

    J'utilise le bundle FOSUserBundle de la même manière que dans le tutoriel. J'ai aussi un Bundle nommé NetworkBundle dans lequel j'ai créé une entité Message.php.

    Chaque message appartient à un utilisateur et j'ai donc créé une relation OnetoMany. Je vous met le code de mes deux entités:

    User.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    <?php
    namespace MyApp\UtilisateurBundle\Entity;
    use FOS\UserBundle\Entity\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="fos_user")
     */
    class User extends BaseUser
    {
    	/**
    	* @ORM\Id
    	* @ORM\Column(type="integer")
    	* @ORM\generatedValue(strategy="AUTO")
    	*/
    	protected $id;
     
            /**
            * @ORM\OneToMany(targetEntity="NetworkBundle\Entity\Message", mappedBy="user")
            * @ORM\OrderBy({"createdAt" = "DESC"})
            *
            * @var ArrayCollection $message
            */
            protected $message;
     
    	public function __construct()
    	{
    		parent::__construct();
    	}
     
     
     
     
     
        /**
         * Get id
         *
         * @return integer $id
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Add message
         *
         * @param NetworkBundle\Entity\Message $message
         */
        public function addMessage(\NetworkBundle\Entity\Message $message)
        {
            $this->message[] = $message;
        }
     
        /**
         * Get message
         *
         * @return Doctrine\Common\Collections\Collection $message
         */
        public function getMessage()
        {
            return $this->message;
        }
    }
    et Message.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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    <?php
     
    namespace MyApp\NetworkBundle\Entity;
    use FOS\UserBundle\Entity\User as BaseUser;
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * @ORM\Entity
     * @ORM\Table(name="message")
     */
    class Message
     
    {
     
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
     
     
        /**
         * @ORM\Column(type="text")
         */
        protected $message;
     
         /**
         * @ORM\Column(type="datetime", name="created_at")
         *
         * @var DateTime $createdAt
         */
        protected $createdAt;
     
        /**
         * @ORM\ManyToOne(targetEntity="UtilisateurBundle\Entity\User", inversedBy="message")
         * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
         *
         * @var User $user
         */
        protected $user;
     
     
     
     
        /**
         * Get id
         *
         * @return integer $id
         */
        public function getId()
        {
            return $this->id;
        }
     
        /**
         * Set message
         *
         * @param text $message
         */
        public function setMessage($message)
        {
            $this->message = $message;
        }
     
        /**
         * Get message
         *
         * @return text $message
         */
        public function getMessage()
        {
            return $this->message;
        }
     
        /**
         * Set createdAt
         *
         * @param datetime $createdAt
         */
        public function setCreatedAt($createdAt)
        {
            $this->createdAt = $createdAt;
        }
     
        /**
         * Get createdAt
         *
         * @return datetime $createdAt
         */
        public function getCreatedAt()
        {
            return $this->createdAt;
        }
     
        /**
         * Set user
         *
         * @param UtilisateurBundle\Entity\User $user
         */
        public function setUser(\UtilisateurBundle\Entity\User $user)
        {
            $this->user = $user;
        }
     
        /**
         * Get user
         *
         * @return UtilisateurBundle\Entity\User $user
         */
        public function getUser()
        {
            return $this->user;
        }
    }
    C'est deux fichier sont les fichiers que j'obtiens après avoir utilisé la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php app/console doctrine:generate:entities MyApp
    Ensuite quand je passe la commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php app/console doctrine:schema:update --force
    J'obtiens une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ErrorException]                                                                                                                                                                                               
      Warning: class_parents(): Class UtilisateurBundle\Entity\User does not exist and could not be loaded in /miniprojet/vendor/doctrine/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php line 222
    Je n'arrive pas à interpréter cette erreur. Il y a peut-être une erreur de mapping mais dans mon fichier config.ylm j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    doctrine:
        orm:
            auto_generate_proxy_classes: %kernel.debug%
            auto_mapping: true

    ce qui semble être la configuration normale. Je suis sur la béta 4 de symfony 2. Pouvez vous m'aider à interpréter et résoudre cette erreur?

    Cordialement

    Edit: J'ai oublié de préciser que les deux commandes fonctionnent quand les entités sont dans le même bundle.

  2. #2
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Salut,

    Tu t'en sors avec ce probleme ? T'as essaye en mettant targetEntity=\blabla, avec l'antislash au debut ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Hello

    Non j'ai toujours pas trouvé de solution à ce problème. J'ai finit par continuer à travailler en mettant les deux entités dans le même bundle...

    J'ai essayé avec l'antislash au début:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    targetEntity = "\UtilisateurBundle\Entity\User"
    ,mais ça introduit encore plus d'erreurs. Donc je pense que la syntax correcte est sans l'antislash au début.

    Tout ce passe bien jusqu'à ce que j'utilise la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php app/console doctrine:schema:update --force
    et que j'obtienne le message d'erreur. Apparemment doctrine d'arrive pas à trouver la classe, mais je ne comprend pas pourquoi.

  4. #4
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    En haut de message.php, tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use FOS\UserBundle\Entity\User as BaseUser;
    Enleve le et met plutot a la place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use MyApp\UtilisateurBundle\Entity\User;
    Je doute que ca resolve le probleme mais bon, ca sera toujours mieux.

  5. #5
    Membre actif

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    186
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2008
    Messages : 186
    Points : 234
    Points
    234
    Par défaut
    Il manque je pense aussi l'adresse complète de ton namespace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /**
            * @ORM\OneToMany(targetEntity="MyApp\NetworkBundle\Entity\Message", mappedBy="user")
            * @ORM\OrderBy({"createdAt" = "DESC"})
            *
            * @var ArrayCollection $message
            */
            protected $message;
    Idem dans Message

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Merci à vous deux! C'était bien ces deux erreurs là. Après coup je me sens un peu con...

    Merci encore pour votre aide.

  7. #7
    Inscrit
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 319
    Points : 476
    Points
    476
    Par défaut
    Citation Envoyé par spike2 Voir le message
    Il manque je pense aussi l'adresse complète de ton namespace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /**
            * @ORM\OneToMany(targetEntity="MyApp\NetworkBundle\Entity\Message", mappedBy="user")
            * @ORM\OrderBy({"createdAt" = "DESC"})
            *
            * @var ArrayCollection $message
            */
            protected $message;
    Idem dans Message
    Et pourtant j'ai relu 3 fois ses entites...

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

Discussions similaires

  1. [2.x] Relation entre entité
    Par lodizzz dans le forum Symfony
    Réponses: 1
    Dernier message: 12/01/2012, 11h06
  2. [2.x] relations entre entités ManyToOne ou ManyToMany
    Par ziemelitis dans le forum Symfony
    Réponses: 5
    Dernier message: 02/01/2012, 18h19
  3. relation entre entités dans microsoft crm
    Par bssouf21 dans le forum Microsoft Dynamics CRM
    Réponses: 3
    Dernier message: 06/12/2011, 18h44
  4. relation entre entités dans microsoft crm
    Par bssouf21 dans le forum Microsoft Dynamics CRM
    Réponses: 0
    Dernier message: 05/12/2011, 10h20
  5. Relation entre tables dans bdd différentes
    Par Mandotnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 29/03/2006, 08h03

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