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

Symfony PHP Discussion :

Pb entre entités avec relation ManyToOne [3.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut Pb entre entités avec relation ManyToOne
    Bonjour à tous,

    Sous Symfony 3.3.13, j’ai un problème sur une relation ManyToOne.
    Dans mon projet, une annonce peut avoir plusieurs candidatures.

    J’exécute la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    php bin/console doctrine:schema:update --dump-sql
    Et j’ai le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      [Doctrine\ORM\Mapping\MappingException]                                      
      The target-entity testBunble\Entity\Annonce cannot be found in 'testBundle\  
      Entity\Candidature#annonce'.
    Voici mon entité Candidature (qui contient plein d’autres champs) :
    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
    namespace testBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Candidature
     *
     * @ORM\Table(name="candidature")
     * @ORM\Entity(repositoryClass="testBundle\Repository\CandidatureRepository")
     */
    class Candidature
    {
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @ORM\ManyToOne(targetEntity="testBunble\Entity\Annonce")
         * @ORM\JoinColumn(nullable=false)
         */
        private $annonce;
    Voici mes getters et setters dans mon entité pour le champ annonce :
    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
        /**
         * Set annonce
         *
         * @param \testBunble\Entity\Annonce $annonce
         *
         * @return Candidature
         */
        public function setAnnonce(\testBunble\Entity\Annonce $annonce)
        {
            $this->annonce = $annonce;
     
            return $this;
        }
     
        /**
         * Get annonce
         *
         * @return \testBunble\Entity\Annonce
         */
        public function getAnnonce()
        {
            return $this->annonce;
        }
    Dans mon annotation ManyToOne, il faut bien que je mette l’entité cible Annonce, donc avec une majuscule ?

    Je ne comprends pas le message d’erreur qui me dit que mon entité n’est pas trouvée dans 'testBundle\Entity\Candidature#annonce'.
    Pourquoi dans ce message, j’ai annonce en minuscule ?

    J’ai une coquille quelque part sur la casse ?

    Ou c’est tout à fait autre chose ? Vous avez des idées ?

    Merci d’avance pour votre aide !

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    bonjour,
    bien sûr que t'as une coquille.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     /**
         * @ORM\ManyToOne(targetEntity="testBunble\Entity\Annonce")
         * @ORM\JoinColumn(nullable=false)
         */
        private $annonce;
    le namespace ta targetEntity est bien "testBundle\Entity\Annonce" et non "testBunble\Entity\Annonce".

    Pourtant t'es pas obligé d'utiliser le fully qualified class name (FQCN) ( "testBundle\Entity\Annonce") dans targetEntity car tes entités se trouvent au sein du même namespace. donc tu peux directement mettre dans la targetEntity le nom court de l'entité associé comme suit:

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     /**
         * @ORM\ManyToOne(targetEntity="Annonce")
         * @ORM\JoinColumn(nullable=false)
         */
        private $annonce;

    il existe des lives templates symfony qui auto-complètent les annotations, les namespaces... que tu peux intégrer dans certains IDE

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 156
    Par défaut
    Merci beaucoup pour tes indications, c'est nickel en mettant le nom court.

    Je vais voir pour les IDE, ça peut surement aider...

    Sujet résolu, merci encore !!!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/10/2016, 19h18
  2. [2.x] les relation entre entités avec Doctrine (Symfony)
    Par mandzokich dans le forum Symfony
    Réponses: 13
    Dernier message: 19/08/2014, 01h39
  3. [2.x] Update Entity avec relation ManyToOne non fonctionnel
    Par khyor dans le forum Symfony
    Réponses: 2
    Dernier message: 20/07/2012, 12h02
  4. [AC-2010] Fusion entre tables avec relations
    Par 105rn2 dans le forum Access
    Réponses: 5
    Dernier message: 26/01/2012, 23h06
  5. Réponses: 12
    Dernier message: 27/05/2010, 20h01

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