我有一个父(注册)和子(参与者)实体。当我删除父母的最后一个孩子时,我也想删除父母。为此使用 postRemove 生命周期事件对我来说很有意义,但我找不到从实体访问实体管理器的方法(我也不确定我应该这样做)。实现这一目标的正确方法是什么?
问问题
374 次
1 回答
2
不,您不应该从 Entity 访问 EntityManager,这从根本上是错误的。
我看到的第一个选项是在postRemove
您的Participant
. 然后使用一个事件订阅者,它被注入EntityManager
并完成工作。您可以附加参与者或注册作为事件参数,只要最适合您。
编辑:实际上,我使用 Symfony 的事件调度程序/订阅者是错误的,而是使用 Doctrine 的事件侦听器/订阅者。使用 Symfony 的事件时,您仍然需要将调度程序注入实体。此外,Doctrine 已经发出了一个事件,复制它会很麻烦。
诀窍是将侦听器注册为服务,并将其标记为doctrine.event_listener
. 这样,您可以通过事件对象访问被删除的实体,并通过注入访问实体管理器,并且一切都在实体之外完成。Symfony 食谱的更多信息
于 2013-04-01T08:59:06.557 回答