Php 如何在删除\更新另一个实体后删除\更新第2个实体

Php 如何在删除\更新另一个实体后删除\更新第2个实体,php,orm,doctrine-orm,doctrine,Php,Orm,Doctrine Orm,Doctrine,在我的特殊情况下,我有以下几点: 我有一个实体,在某个点上可能会自动删除为孤儿。现在,我需要对它的移除做出反应。此外,我不知道这一反应是否会涉及到一些条令行动。特别是,我需要在一些解耦的组件上触发一些方法,我不知道这个组件的实现细节。例如,我对该组件的默认实现使用了原则,并且需要在前面提到的实体被删除时删除某些实体 现在问题本身: 我知道EntityManager刷新操作不能在生命周期事件中触发(文档中提到了这一点,这是因为生命周期事件发生在刷新方法中)。尤其是在postRemove事件中无法触

在我的特殊情况下,我有以下几点:

我有一个实体,在某个点上可能会自动删除为孤儿。现在,我需要对它的移除做出反应。此外,我不知道这一反应是否会涉及到一些条令行动。特别是,我需要在一些解耦的组件上触发一些方法,我不知道这个组件的实现细节。例如,我对该组件的默认实现使用了原则,并且需要在前面提到的实体被删除时删除某些实体

现在问题本身:


我知道EntityManager刷新操作不能在生命周期事件中触发(文档中提到了这一点,这是因为生命周期事件发生在刷新方法中)。尤其是在postRemove事件中无法触发。所以,问题是,在一些实体移除之后,我需要触发一些操作,这些操作可能(也可能不会)触发doctrine entitymanager flush方法,但我不能在postRemove事件中执行。我不知道还有什么地方可以安全地完成这项工作。

好的,最后我做出了以下决定:

在postRemove操作中,我只是向队列添加了一些操作(作为简单的可调用操作)。稍后,在postFlush事件中,我处理排队的操作(这是确定的,因为postFlush事件发生在刷新过程完成之后)

为了以某种常规方式实现这一点,我创建了一个非常简单的队列管理器库()和一个相应的symfony包来连接它()

现在,要添加一些postRemove逻辑,我只需要在我的事件订阅服务器中执行如下操作:

公共函数postRemove(生命周期事件目标$args){
$queueManager=$this->container->get('arko.queue_manager');
$queueManager->add(函数(){
//这里有一些可能会用到的逻辑
}“我的队列名称”);
}
公共函数postFlush(PostFlushEventArgs$args){
$queueManager=$this->container->get('arko.queue_manager');
$queueManager>process('my_queue_name');
}
在接下来的几天里,我将把自述文件写入我的小型队列管理器库并打包。现在,可以使用composer(arko/队列管理器arko/队列管理器捆绑包composer软件包)安装此库或捆绑包,并按上述简单方式使用