我有父(注册)和子(参与者)实体。当我删除父项的最后一个子项时,我也想删除父项。为此我使用postRemove生命周期事件是有道理的,但是我找不到从实体访问实体管理器的方法(我也不确定)。什么是实现这个目标的正确方法?
答案 0 :(得分:2)
不,你不应该从Entity访问EntityManager,这根本就是错误的。
我看到的第一个选项是在 postRemove
的{{1}}中触发一个事件。
然后使用一个事件订阅者,它会注入Participant
并完成工作。
您可以将参与者或注册作为事件参数附加,无论您最喜欢什么。
编辑:实际上,我使用Symfony的事件调度程序/订阅者是错误的,而是使用Doctrine的事件侦听器/订阅者。使用Symfony的事件时,您仍然需要将调度程序注入实体。此外,Doctrine已经发布了一个事件,并且复制它会很混乱。
诀窍是将侦听器注册为服务,并将其标记为EntityManager
。这样,您可以通过事件对象访问实体,通过注入获取实体管理器,所有操作都在实体外部完成。 More info at Symfony cookbook