Problème d'insertion avec une relation ManyToMany
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:
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:
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:
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!