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 :
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?
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();
Merci d'avance!
Partager