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

Plugins PHP Discussion :

[SonataAdmin] Embedded form collection | L'id de l'entité propriétaire ne persit pas sur l'entité inverse


Sujet :

Plugins PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de MaolmeoX
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Par défaut [SonataAdmin] Embedded form collection | L'id de l'entité propriétaire ne persit pas sur l'entité inverse
    Bonjour à tous,

    J'ai deux entités

    Societe et Adresse avec une relation OneToMany qui les relient car une société peut avoir plusieurs adresses.

    UserBundle\Entity\Societe

    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
    <?php
     
    namespace UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Doctrine\Common\Collections\ArrayCollection;
     
    /**
     * Societe
     *
     * @ORM\Table(name="societe")
     * @ORM\Entity(repositoryClass="UserBundle\Repository\SocieteRepository")
     */
    class Societe {
     
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**     
         * @ORM\OneToMany(targetEntity="Adresse", mappedBy="societe", cascade={"persist","remove"})
         */
        private $adresses;
     
        public function __construct() {        
            $this->adresses = new ArrayCollection();
        }
     
    }
    UserBundle\Entity\Adresse

    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
    <?php
     
    namespace UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
     
    /**
     * Adresse
     *
     * @ORM\Table(name="adresse")
     * @ORM\Entity(repositoryClass="UserBundle\Repository\AdresseRepository")
     */
    class Adresse {
     
        /**
         * @var int
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
     
        /**
         * @ORM\ManyToOne(targetEntity="Societe", inversedBy="adresses", cascade={"persist"})
         * @ORM\JoinColumn(name="societe_id", referencedColumnName="id")
         */
        private $societe;
     
    }
    Je veux pouvoir gérer ces entités via Sonata Admin, j'ai donc créé une adminClass de Societe qui embarque une collection d'adresses.

    UserBundle\Admin\SocieteAdmin

    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
    <?php
     
    namespace UserBundle\Admin;
     
    use Sonata\AdminBundle\Admin\Admin;
    use Sonata\AdminBundle\Datagrid\DatagridMapper;
    use Sonata\AdminBundle\Datagrid\ListMapper;
    use Sonata\AdminBundle\Form\FormMapper;
    use Sonata\AdminBundle\Show\ShowMapper;
    use UserBundle\Form\AdresseType;
     
    class SocieteAdmin extends Admin {
     
        /**
         * @param FormMapper $formMapper
         */
        protected function configureFormFields(FormMapper $formMapper) {
            $formMapper
            ->add('id', 'sonata_type_model_hidden')
            ->add('societeNom')
            ->add('societeNumClient')
                    ->end()
                    ->with('Adresses', array('collapsed' => true))
                    ->add('adresses', 'collection', array(
                        'type' => new AdresseType(),
                        'allow_add' => true,
                        'prototype' => true,
                        'by_reference' => true,
            ))
                    ->end()
     
            ;
        }
    }
    Tout cela me génère ça:

    Nom : screen-sonata-admin-societe.jpg
Affichages : 289
Taille : 46,6 Ko

    Comme vous le voyez, je peux créer une société et ajouter autant d'adresses que je veux en cliquent sur le petit "+".

    Le problème c'est qu'une fois que j'ai validé mon formulaire, ça me créé bien les données correspondantes dans ma base de données, mais l'id de la colonne societe_id de la table adresse reste à null.

    Nom : screen-mysql-table-adresse.jpg
Affichages : 299
Taille : 31,0 Ko

    Ce qui veut dire que les deux entités ne sont pas liées.

    J'ai cherché sur le web, je ne vois pas ce que je loupe, pour moi c'est une problème que beaucoup de personnes ont rencontrés donc je ne comprend pas où je fais l'erreur.

    Merci de prendre le temps de me répondre.

  2. #2
    Membre averti Avatar de MaolmeoX
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 11
    Par défaut
    Bonjour à tous,
    Je me permet d'up mon sujet.

    Est-ce que le soucis viendrait des cascade ?
    D'ailleurs sur ce point, on est d'accord que le cascade est géré par doctrine et que si je met un persist, remove ça veut dire que doctrine à accès à ces deux méthodes ?En fonction que l'on face un add ou un remove ?

Discussions similaires

  1. [1.x] Surcharge save() pour embedded form
    Par Nico_F dans le forum Symfony
    Réponses: 6
    Dernier message: 19/07/2011, 11h38
  2. [1.x] Embedded forms & bind()
    Par Nico_F dans le forum Symfony
    Réponses: 7
    Dernier message: 18/05/2011, 15h09
  3. [1.x] Embedded Forms 1 to many : ajout dynamique avec ajax
    Par rastaferraille dans le forum Symfony
    Réponses: 3
    Dernier message: 30/03/2011, 11h53
  4. [1.x] Form filter et embedded form
    Par Jeobs dans le forum Symfony
    Réponses: 9
    Dernier message: 17/09/2010, 17h52
  5. [1.x] Création d'objets avec Embeded form
    Par Adesfire dans le forum Symfony
    Réponses: 4
    Dernier message: 08/01/2010, 16h07

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