Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Symfony 2和条令中创建实体时创建其他实体_Php_Symfony_Events_Doctrine Orm_Doctrine - Fatal编程技术网

Php 在Symfony 2和条令中创建实体时创建其他实体

Php 在Symfony 2和条令中创建实体时创建其他实体,php,symfony,events,doctrine-orm,doctrine,Php,Symfony,Events,Doctrine Orm,Doctrine,我想在创建其他相关实体后初始化一个新用户,例如创建银行账户以不同货币存储他的资金 我曾尝试将条令实体侦听器用于此事件和postPersist事件,它看起来正是我所要查找的,但在经历了数小时的异常行为(持久性异常和重复记录)后,我了解到不建议从条令事件处理程序发出另一个flush() 我如何处理这个问题?我知道我可以使用一些外部队列系统通过后台工作人员来注册和处理事件,但这似乎是一种解决我的用例复杂场景的方法 有更好的方法吗?您可能正在查找postFlush事件 见: 为什么不在构造函数中创建相关

我想在创建其他相关实体后初始化一个新用户,例如创建银行账户以不同货币存储他的资金

我曾尝试将条令实体侦听器用于此事件和
postPersist
事件,它看起来正是我所要查找的,但在经历了数小时的异常行为(持久性异常和重复记录)后,我了解到不建议从条令事件处理程序发出另一个
flush()

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


有更好的方法吗?

您可能正在查找
postFlush
事件

见:


为什么不在构造函数中创建相关的对象呢?条令将递归地保留它们,iirc。你想创建一个聚合根(#DDD)你能解释一下这句话吗
我想在通过创建其他相关实体创建新用户后再初始化一个新用户
?至少对我来说,这很难理解。@KhorneHoly
User
entity有一个
Account[]
的集合。我想在自动创建新用户时为其创建新帐户实体,因为每个用户必须有三个帐户。@Pete创建帐户的逻辑包含在服务中,用户实体无权访问该服务,因为用户是POPO。在EntityManager#flush()的末尾调用postFlush。无法在其侦听器中安全地调用EntityManager#flush()。
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();
}