1

我有一个父(注册)和子(参与者)实体。当我删除父母的最后一个孩子时,我也想删除父母。为此使用 postRemove 生命周期事件对我来说很有意义,但我找不到从实体访问实体管理器的方法(我也不确定我应该这样做)。实现这一目标的正确方法是什么?

4

1 回答 1

2

不,您不应该从 Entity 访问 EntityManager,这从根本上是错误的。

我看到的第一个选项是在postRemove您的Participant. 然后使用一个事件订阅者,它被注入EntityManager并完成工作。您可以附加参与者或注册作为事件参数,只要最适合您。

编辑:实际上,我使用 Symfony 的事件调度程序/订阅者是错误的,而是使用 Doctrine 的事件侦听器/订阅者。使用 Symfony 的事件时,您仍然需要将调度程序注入实体。此外,Doctrine 已经发出了一个事件,复制它会很麻烦。

诀窍是将侦听器注册为服务,并将其标记为doctrine.event_listener. 这样,您可以通过事件对象访问被删除的实体,并通过注入访问实体管理器,并且一切都在实体之外完成。Symfony 食谱的更多信息

于 2013-04-01T08:59:06.557 回答