gpt4 book ai didi

php - 如何在 DBALException 后重新打开 Doctrine Entity Manager

转载 作者:可可西里 更新时间:2023-11-01 13:53:57 29 4
gpt4 key购买 nike

我有一个带有 Symfony 2 的控制台应用程序,该脚本在 cron(终端)上运行。但是,在\Doctrine\DBAL\DBALException 之后,脚本抛出 N\Doctrine\ORM\ORMException 并显示消息“The EntityManager is closed.”。

这是脚本的一部分:

try {

$this->getDoctrine()->getConnection()->beginTransaction();

// ...

$manager = $this->getDoctrine()->getManager();

$entity = new Post();
$entity
->setAuthor($author)
->setTitle($title)
->setContent($content)
;

$manager->persist($entity);
$manager->flush();

$this->getDoctrine()->getConnection()->commit();

return $entity->getId();

} catch (\Doctrine\DBAL\DBALException $e) {

$this->getDoctrine()->resetManager();

$output->writeln(sprintf(
'<error>[!] %s (%s) the post could not be created "%s"</error>',
get_class($e),
date('Y-m-d H:i:s'),
$e->getMessage()
));

return false;

} catch (\Exception $e) {

$this->getDoctrine()->getConnection()->rollback();

$output->writeln(sprintf(
'<error>[!] %s (%s) the post could not be created "%s"</error>',
get_class($e),
date('Y-m-d H:i:s'),
$e->getMessage()
));

return false;
}

如何解决?

最佳答案

您可以像这样手动重置您的实体管理器:

//...
} catch (\Doctrine\DBAL\DBALException $e) {

$manager = $this->getDoctrine()->getManager();

if (!$manager->isOpen()) {
$manager = $manager->create(
$manager->getConnection(),
$manager->getConfiguration()
);
}

$output->writeln(sprintf(
'<error>[!] %s (%s) the post could not be created "%s"</error>',
get_class($e),
date('Y-m-d H:i:s'),
$e->getMessage()
));

return false;
}
//...

关于php - 如何在 DBALException 后重新打开 Doctrine Entity Manager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152969/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com