尝试删除实体,而不保留其他更改。请注意(虽然在这种特定情况下并不是真的需要),该方法不应该影响在操作之后调用的flush()
的结果。
$em->remove($entity);
$em->flush($entity);
这抛出了一个'InvalidArgumentException' with message 'Entity has to be managed for single computation
。
我可以直接使用DQL进行删除;只是想知道是否有办法通过实体经理来完成。
我忘记了交易,我必须测试它:
// $em instanceof EntityManager
$em->transactional(function($em) {
$em->remove($entity);
});
只是不确定我是否可以使用事务,如果在事务之前和之后更改的实体在显式事务中是而不是。
试试这个:
-
从当前EM:中分离实体
$em->detach($entity);
-
创建EM的新实例并使用它删除:
$em2->remove($entity); $em2->flush();
或者,您可以使用负责从EM分离所有实体的方法clear()
,如下所示:
$em->clear();
$em->remove($entity);
$em->flush();
简单的解决方案是:
$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();