关于php:Doctrine中的独立实体错误

Detached entity error in Doctrine

我正在将一系列实体发布到控制器,我想删除所有这些实体。但是,以下代码引发A detached entity was found during removed MyProject\\Bundle\\MyBundle\\Entity\\MyEntity@000000004249c13f00000001720a4b59错误。我要去哪里错了?

1
2
3
4
5
6
$doctrineManager = $this->getDoctrine()->getManager();
foreach ($form->getData()->getEntities() as $entity) {
    $doctrineManager->merge($entity);  
    $doctrineManager->remove($entity);
}
$doctrineManager->flush();

您应该对处于分离状态的实体使用合并操作,并且要将其置于托管状态。

应该像这样$entity = $em->merge($detachedEntity)进行合并。之后,$entity指的是合并操作返回的完全托管的副本。因此,如果您的$form包含分离的实体,则应该这样调整代码:

1
2
3
4
5
6
$doctrineManager = $this->getDoctrine()->getManager();
foreach ($form->getData()->getEntities() as $detachedEntity) {
    $entity = $doctrineManager->merge($detachedEntity);  
    $doctrineManager->remove($entity);
}
$doctrineManager->flush();

但是,如果$form不包含分离的实体,则应删除合并操作,如下所示:

1
2
3
4
5
$doctrineManager = $this->getDoctrine()->getManager();
foreach ($form->getData()->getEntities() as $entity) {
    $doctrineManager->remove($entity);
}
$doctrineManager->flush();

此图像应帮助您了解实体状态转换。它取自Java Persistence API,但在Doctrine2中几乎相同。

JPA