Dans une entité Doctrine J'ai cette configuration:Supprimer ManyToMany Doctrine2 relation
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @ORM\ManyToMany(targetEntity="PriceRate", cascade={"all"}, orphanRemoval=true)
* @ORM\JoinTable(name="product_rates",
* joinColumns={@ORM\JoinColumn(name="product_id",referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="rate_id",referencedColumnName="id")})
*/
protected $rates;
Lorsque je supprime l'entité tente de supprimer la première table price_rate
, au lieu de la table jointe si je reçois l'erreur suivante :
Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (
uniski
.product_rates
, CONSTRAINTFK_15A90A8FBC999F9F
FOREIGN KEY (rate_id
) REFERENCESprice_rate
(id
))
Pourquoi n'essaie-t-il pas d'abord de supprimer les lignes de la table jointes? J'ai essayé d'ajouter des instructions onDelete
sur les colonnes de la table de jointure, mais cela n'a pas fonctionné.
Ceci est une relation unidirectionnelle car PriceRate est utilisé par d'autres entités, par conséquent j'utilise une relation ManyToMany.
La seule façon dont cela fonctionne est avant de retirer l'entité est d'effacer la ArrayCollection des entités enfants comme ceci:
$product->removeAllRate(); //it does this: $this->rates->clear();
$em->remove($product);
$em->flush();
Merci!
ce poste m'a aidé à: https://stackoverflow.com/questions/14257004/doctrine2-symfony2-cascading-remove-integrity-constraint-violation-1451. Salutations – Albeis