Doctrine2刷新一个被删除的实体

时间:2012-12-14 22:46:52

标签: php orm doctrine-orm

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

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

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

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

3 个答案:

答案 0 :(得分:3)

我忘记了transactions,我必须测试一下:

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

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

答案 1 :(得分:2)

试试这个:

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

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

    $em2->remove($entity);
    $em2->flush();   
    
  3. 或者,您可以使用负责从EM分离所有实体的方法clear(),如下所示:

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

答案 2 :(得分: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();