原则:只有在提交事务后,才有办法处理“ postRemove”吗?

时间:2019-05-03 11:30:42

标签: php mysql symfony doctrine-orm

从数据库中删除实体本身后,我想删除与给定实体相关的文件。为此,Doctrine的“ postRemove”事件似乎很完美,除非删除发生在事务内部。如果删除实体后回滚事务-文件将被删除,但实体将保留在数据库中。

我正在从事的项目是一个很大的项目,该实体被广泛使用。通常,它也可以通过“ cascade = remove”删除,因此“灵魂不能使用事件,并且每次都必须手动执行”,实现起来很头疼。

一个例子:

$img = new Image();
$img->setFileName('test.jpg');
$em->persist($img);
$em->flush();

$em->beginTransaction();
$em->remove($img);
$em->flush();
$em->rollback();

事件本身将是:

public function postRemove(LifecycleEventArgs $args) {
    $entity = $args->getObject();
    $em = $args->getObjectManager();

    if ($entity instanceof Image && file_exists($entity->getFileName())) {
        unlink($entity->getFileName());
    }
}

执行该代码后,“ test.jpg”文件将被删除,但实体仍将保留。

我想要实现的是:在回滚时,文件和实体都保留,并且在提交时,它们都被删除。

0 个答案:

没有答案