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
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
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(); } }
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.
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; }
UserBundle\Admin\SocieteAdmin
Tout cela me génère ça:
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() ; } }
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.
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.
Partager