7

尝试删除实体,而不保留其他更改。请注意(虽然在这种特定情况下它并不是真正需要的)该方法不应影响flush()操作后调用的结果。

$em->remove($entity);
$em->flush($entity);

抛出一个'InvalidArgumentException' with message 'Entity has to be managed for single computation.

我可以使用 DQL 进行删除;只是想知道是否有办法通过实体管理器来做到这一点。

4

3 回答 3

3

我忘记了transactions,我必须对其进行测试:

// $em instanceof EntityManager
$em->transactional(function($em) {
    $em->remove($entity);
});

如果在事务之前和之后更改的实体不在显式事务中,则不确定我是否可以使用事务。

于 2012-12-15T13:33:36.660 回答
2

试试这个:

  1. 从当前 EM 中分离实体:

    $em->detach($entity);  
    
  2. 创建一个新的 EM 实例并使用它来删除:

    $em2->remove($entity);
    $em2->flush();   
    

或者,您可以使用clear()负责从 EM 中分离所有实体的方法,如下所示:

$em->clear();
$em->remove($entity);
$em->flush(); 
于 2012-12-15T12:49:14.970 回答
1

简单的解决方案是:

$entity = $em->manage($entity);
// $entity now refers to the fully managed copy returned by the merge operation.
// The EntityManager $em now manages the persistence of $entity as usual
$em->remove($entity);
$em->flush();
于 2013-09-16T14:47:33.727 回答