我想在创建其他相关实体(例如创建银行帐户以将其资金存储在不同的货币中。
我试图为此使用学说实体听众和postPersist
事件,这看起来完全是我想要的,但是经过数小时的极其奇怪的行为(持久性例外和重复记录),我读过,我不建议这样做从学说事件处理程序中发出另一个flush()
。
我如何解决这个问题?我知道我可以使用一些外部队列系统通过背景工人进行注册和处理事件,但看起来像是我用例的复杂方案的一种方法。
有更好的方法吗?
您可能正在寻找postFlush
事件?
请参阅:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/reference/events.html#postflush
function postFlush($args) {
$em = $args->getEntityManager();
foreach ($em->getUnitOfWork()->getScheduledEntityInsertions() as $entity) {
if ($entity instanceof User) {
// check for existing accounts, etc.
// create new, if needed
// $em->persist($account);
}
}
$em->flush();
}