在Symfony 2和Doctrine中创建实体时创建其他实体

时间:2016-12-27 16:10:48

标签: php symfony events doctrine-orm doctrine

我希望在创建新用户之后通过创建其他相关实体来初始化新用户,例如创建银行账户,以不同的货币存储他的资金。

我已经尝试使用Doctrine Entity Listeners来实现这个和postPersist事件,这看起来正是我想要的,但经过几个小时的非常奇怪的行为(持久异常和重复记录)我已经读过不建议从学说事件处理程序中发出另一个flush()

如何解决此问题?我知道我可以使用一些外部队列系统来通过后台工作人员注册和处理事件,但它看起来像是一种复杂场景的方法。

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您可能正在寻找postFlush事件?

请参阅:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/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();
}