Bonjour,
Je rencontre un petit souci à la définition de persist en cascade dans une table jointure entre deux entités "utilisateur" et "entreprise".
J'ai donc mes deux entités sus-citées définies ainsi :
Utilisateur
Entreprise
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Utilisateur extends BaseUser { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id;
Et enfin l'entité Utilisateur_Entreprise:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class Entreprise { protected $siret; /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * */ private $id;
Seulement, suite à un petit test pour vérifier le fonctionnement du persist :
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 class Utilisateur_Entreprise { /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\ManyToOne(targetEntity="Proetco\UserBundle\Entity\Utilisateur", inversedBy="entreprises", cascade={"persist"}) * @Assert\Type(type="Proetco\UserBundle\Entity\Utilisateur") * @Assert\Valid */ protected $utilisateur; /** * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") * @ORM\ManyToOne(targetEntity="Proetco\FrontBundle\Entity\Entreprise", inversedBy="utilisateurs", cascade={"persist"}) * @Assert\Type(type="Proetco\FrontBundle\Entity\Entreprise") * @Assert\Valid */ protected $entreprise;
J'obtiens une erreur (j'ai juste supprimé les namespace et noms des bundles pour la lecture) du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $ue = new Utilisateur_Entreprise; $utilisateur = new Utilisateur; $entreprise = new Entreprise; $ue->setUtilisateur($utilisateur); $ue->setEntreprise($entreprise); $em = $this->getDoctrine()->getEntityManager(); $em->persist($utilisateur); $em->persist($entreprise); $em->persist($ue);
J'ai relu plusieurs fois la doc Doctrine sur les associations et les persist, et cela me semble pourtant correct. On peut bien l'utiliser ainsi?
Code : Sélectionner tout - Visualiser dans une fenêtre à part Entity of type ***\Utilisateur_Entreprise has identity through a foreign entity ***\Utilisateur, however this entity has no ientity itself. You have to call EntityManager#persist() on the related entity and make sure it an identifier was generated before trying to persist '***Utilisateur_Entreprise'. In case of Post Insert ID Generation (such as MySQL Auto-Increment or PostgreSQL SERIAL) this means you have to call EntityManager#flush() between both persist operations.
Merci d'avance pour votre aide.
Partager