Doctrine 2’s EntityManager class will permanently close connections upon failed transactions. Thus, further requests using these closed instances will fail with the following exception:
Doctrine\\ORM\\ORMException' with message 'The EntityManager is closed.
So, make sure to check your EntityManager’s state before your actual tasks:
if (!$entityManager->isOpen()) { $entityManager = $entityManager->create( $entityManager->getConnection(), $entityManager->getConfiguration()); }
Better, create a function called getEntityManager that takes care of this check and makes sure that you always get a viable instance of EntityManager to work with:
private static function getEntityManager() { if (!self::$entityManager->isOpen()) { self::$entityManager = self::$entityManager->create( self::$entityManager->getConnection(), self::$entityManager->getConfiguration()); } return self::$entityManager; }
So you can use:
self::$entityManager = self::getEntityManager(); self::$entityManager->persist($some_entity_instance); self::$entityManager->flush();
Thats’s it.