代码之家  ›  专栏  ›  技术社区  ›  Sancho

重置实体管理器的最佳方法

  •  1
  • Sancho  · 技术社区  · 7 年前

    当我有PDOException时,重置条令实体管理器的最佳方法是什么?

    在foreach循环中,我需要保存我得到的最大实体。如果一个实体失败,我想发送一封电子邮件并继续运行foreach循环。

    例子:

    private $entityManager;
    
    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }
    
    public function testMethod(array $entities)
    {
        foreach ($entities as $entity)
        {
            try 
            {
                $entity = new MyEntity();
                $entity->setSomeData();
                $this->entityManager->persist($entity);
                $this->entityManager->flush();
            } catch (\Exception $e)
            {
              //SEND EMAIL
            }
        }
    }
    

    有一段时间,我收到消息“EntityManager已关闭”,由pdoException抛出。

    重置实体管理器以继续循环的最佳方法是什么?

    注意:这是一个示例代码。我不会为每个错误发送电子邮件或刷新。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Luma Macagnan    7 年前

    你可以做些什么来提高性能:你只是在循环之外打电话。所以你的记忆只有在最后才会被刷新。 $this->entityManager->flush();

    但是你可以试着打电话 $this->getDoctrine()->resetManager(); 如果在抛出异常之后需要继续保存东西。