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
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;
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;
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
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;
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
        $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'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
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.
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?

Merci d'avance pour votre aide.