php - 教义:有没有办法仅在事务提交后处理“postRemove”?
问题描述
从数据库中删除实体本身后,我想删除与给定实体相关的文件。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”文件将被删除,但实体仍将保留。
我想要实现的是:回滚时文件和实体都保留,提交时它们都被删除。
解决方案
推荐阅读
- python - 处理具有并行/异步请求的队列
- spring-boot - SpringBoot微服务@StreamListener在抛出RunTimeException时重试无限时间
- amazon-ec2 - AWS - 可以调度实例类型更改吗?
- javascript - React-navigation 如何将数据向下传递给导航器对象
- email - Gmail 421-4.7.0 错误
- jazzy - 您如何写入 Jazzy 的 index.html?
- php - 从 Woocommerce 中的电子邮件通知更改下载部分中的列名称
- dialogflow-es - 使用 Google 和 DialogFlow 上的操作管理超时
- r - geom_dumbbell 图不继承 aes
- ionic-framework - Sending String command to BLE in Ionic