I am posting an array of entities to a controller, all of which I'd like to delete. However, the below code throws an A detached entity was found during removed MyProject\Bundle\MyBundle\Entity\MyEntity@000000004249c13f00000001720a4b59
error. Where am I going wrong?
$doctrineManager = $this->getDoctrine()->getManager();
foreach ($form->getData()->getEntities() as $entity) {
$doctrineManager->merge($entity);
$doctrineManager->remove($entity);
}
$doctrineManager->flush();
You should use merge operation on entities which are in detached state and you want to put them to managed state.
Merging should be done like this
$entity = $em->merge($detachedEntity)
. After that$entity
refers to the fully managed copy returned by the merge operation. Therefore if your$form
contains detached entities, you should adjust your code like this:However, in case that the
$form
does not contain detached entities, you should remove the merge operation, like this:This image should help you to understand entity state transitions. It is taken from Java Persistence API, but in Doctrine2 it is about the same.