Bonjour,

J'utilise Symfony2 avec Doctrine et je rencontre actuellement un problème lors de l'insertion d'une nouvelle donnée avec une relation manyToMany.

Je dispose des tables suivantes :
  • livre
  • emprunt
  • livre_emprunt

La table livre_emprunt est ma table de jointure entre les tables livre et emprunt, elle contient juste deux colonnes id_livre et id_emprunt.
J'ai défini les deux fichiers orm pour les tables livre et emprunt de la manière suivante :
Code Emprunt.orm.yml : 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
bibliotheque\DonneesBundle\Entity\Emprunt:
    type: entity
    table: emprunt
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
        date_debut:
            type: date
            notnull: true
        date_retour:
            type: date
            notnull: true
        date_retour_reelle:
            type: date
    manyToMany:
        livres:
            targetEntity: Livre
            mappedBy: emprunts
            joinTable:
              name: livre_emprunt
              joinColumns: 
                id_emprunt:
                  referencedColumnName: id
              inverseJoinColumns: 
                id_livre:
                  referencedColumnName: id 
    lifecycleCallbacks: {  }
Code Livre.orm.yml : 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
 
bibliotheque\DonneesBundle\Entity\Livre:
    type: entity
    table: livre
    fields:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
        titre:
            type: string
            length: 255
            notnull: true
        resume:
            type: string
            length: 1024
        apprenant:
            type: boolean
        niveau:
            type: string
            length: 2
    [...]
    manyToMany:
      emprunts:
        targetEntity: Emprunt
        inversedBy: livres
    lifecycleCallbacks: {  }

Je rencontre un problème lorsque je créée un nouvel objet de type Emprunt et que je veux l'enregistrer dans la base de données. J'effectue mon enregistrement de la manière suivante :
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
// Création de l'objet Entity
        $empruntEntity = new Emprunt();
        // On mappe avec les données du formulaire
        $empruntEntity->setDateDebut($emprunt->getDateDebut());
        $empruntEntity->setDateRetour($emprunt->getDateRetour());
        $listeLivres = $emprunt->getLivres();
        if (!empty($listeLivres)) {
            foreach ($listeLivres as $livre) {
                $empruntEntity->addLivre($livre);
            }
        } 
 
        // Ajout de l'emprunt dans la base de données
        $this->em->persist($empruntEntity);
        $this->em->flush();
Or à l'exécution, j'ai bien une nouvelle entrée dans la table "emprunt" mais la table de jointure n'est pas mise à jour avec les nouvelles valeurs. Je précise que les objets Livre sont déjà présents en base avant d'effectuer l'ajout. Auriez-vous une idée sur l'origine de ce problème?

Merci d'avance!