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 avec attribut


Sujet :

Doctrine2 PHP

  1. #1
    Membre confirmé Avatar de Legenyes
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2005
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 174
    Par défaut Relation many-to-many avec attribut
    bien le bonjour, j'ai un petit soucis de représentation relationnelle.

    J'ai une table Cinéma et une Table Film.
    Je souhaiterais maintenant rajouter un relation qui me donnerais les films projette dans chaque cinéma et pour chacun l'url de la page de présentation du film sur le site du cinéma en question.

    Voici mon entity
    class MovieCinema
    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
     
    class MovieCinema {
     
        /**
         * @ORM\Id
         * @ORM\ManyToOne(targetEntity="MyNameSpace\CoreBundle\Entity\Cinema", inversedBy="movies")
         */
        private $cinema;
     
         /**
         * @ORM\Id
         * @ORM\ManyToOne(targetEntity="MyNameSpace\CoreBundle\Entity\Movie", inversedBy="cinemas")
         */
        private $movie;
     
           /**
         * @var string $url
         *
         * @Assert\NotBlank()
         * @ORM\Column(name="url", type="integer")
         */
        private $url;
    Voici mes form
    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
    class MovieCinemaType extends AbstractType {
     
        public function buildForm(FormBuilder $builder, array $options) {
            $builder
                    ->add('cinema', 'entity', array(
                        'label' => 'movie.field.cinema',
                        'class' => 'MyNameSpaceCoreBundle\Entity\Cinema',
                        'required' => false
                    ))
                    ->add('url', 'text', array(
                        'label' => 'movie.field.url'
                    ))
            ;
        }
     
        public function getName() {
            return 'corebundle_moviecinematype';
        }
     
     
        public function getDefaultOptions(array $options) {
            return array(
                    'data_class' => 'MyNameSpace\CoreBundle\Entity\MovieCinema'
                    );
        }
     
    }
    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
     
    class MovieType extends AbstractType {
     
        public function buildForm(FormBuilder $builder, array $options) {
            $builder
                    ->add('name', 'text', array(
                        'label' => 'movie.field.name'
                    ))
                    ->add('cinemas', 'collection', array(
                        'type' => new MovieCinemaType,
                        'prototype' => true,
                        'allow_add' => true)
                    )
            ;
        }
     
        public function getName() {
            return 'corebundle_movietype';
        }
     
    }

    Lorsque je veux sauver mon formulaire, j'obtient
    A new entity was found through the relationship 'MyNameSapce\CoreBundle\Entity\Movie#cinemas' that was not configured to cascade persist operations for entity: MyNameSapce\CoreBundle\Entity\MovieCinema@0000000059c00fdd00000000cd3391df. Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'MyNameSapce\CoreBundle\Entity\MovieCinema#__toString()' to get a clue.

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Par défaut
    Je pense que les annotations concernant la relation des champs $cinema et $movie ne sont pas justes :

    Exemple : si le champ de User (user_id) et l'autre de Group (group_id) ont une relation ManyToMany :
    http://docs.doctrine-project.org/pro...ref-manytomany

    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
    /**
     * Owning Side
     *
     * @ManyToMany(targetEntity="Group", inversedBy="features")
     * @JoinTable(name="user_groups",
     *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
     *      inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
     *      )
     */
    private $groups;
    /**
     * Inverse Side
     *
     * @ManyToMany(targetEntity="User", mappedBy="groups")
     */
    private $features;

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    Je pense que les annotations concernant la relation des champs $cinema et $movie ne sont pas justes :
    on est pas obligés de préciser tout le mapping des clé étrangères, par défaut Doctrine utilisera ses propres convention pour les générer
    A new entity was found through the relationship 'MyNameSapce\CoreBundle\Entity\Movie#cinemas' that was not configured to cascade persist operations for entity: MyNameSapce\CoreBundle\Entity\MovieCinema@0000000059c00fdd00000000cd3391df. Explicitly persist the new entity or configure cascading persist operations on the relationship. If you cannot find out which entity causes the problem implement 'MyNameSapce\CoreBundle\Entity\MovieCinema#__toString()' to get a clue.
    configure ta relation entre Film et FilmCinema avec un cascade persist:

    http://docs.doctrine-project.org/pro...ade-operations

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. Réponses: 5
    Dernier message: 10/08/2014, 17h25
  3. Réponses: 0
    Dernier message: 25/07/2011, 17h42
  4. [sqlalchemy] Création d'une relation Many to Many avec attributs
    Par joubu dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 05/08/2010, 20h13
  5. 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

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