防止在doctrine 2监听器中删除实体

时间:2012-09-06 15:59:15

标签: php doctrine-orm

除了被删除之外,我需要让实体更改状态。对于那些我为flush方法添加了一个监听器。所以,我可以看到被删除的所有实体,但不能阻止它们被删除。有可能吗?

2 个答案:

答案 0 :(得分:6)

在事件处理程序中抛出异常会切断事务并回滚更改。

public function onFlush(OnFlushEventArgs $eventArgs)
{
    $em = $eventArgs->getEntityManager();
    $uow = $em->getUnitOfWork();

    foreach ($uow->getScheduledCollectionDeletions() AS $col) {
         throw new Exception('avoid delete');
    }
}

答案 1 :(得分:1)

只需安装doctrine扩展名https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/softdeleteable.md或以此为例开发自己的解决方案