diff --git a/lib/Doctrine/EntityManagerFactory.php b/lib/Doctrine/EntityManagerFactory.php index 940386a2e3..aabc2fa0e8 100644 --- a/lib/Doctrine/EntityManagerFactory.php +++ b/lib/Doctrine/EntityManagerFactory.php @@ -51,6 +51,7 @@ class EntityManagerFactory { public function createEntityManager(): EntityManager { $entityManager = EntityManager::create($this->connection, $this->configuration); + $this->cleanupListeners($entityManager); $this->setupListeners($entityManager); if ( class_exists(Debugger::class) @@ -61,6 +62,22 @@ class EntityManagerFactory { return $entityManager; } + /** + * We sometimes work with more EntityManager in tests, and the behavior could be inconsistent with multiple listeners + */ + private function cleanupListeners(EntityManager $entityManager) { + $eventManager = $entityManager->getEventManager(); + foreach ($eventManager->getListeners() as $event => $listeners) { + if (!is_array($listeners)) { + $eventManager->removeEventListener($event, $listeners); + continue; + } + foreach ($listeners as $listener) { + $eventManager->removeEventListener($event, $listener); + } + } + } + private function setupListeners(EntityManager $entityManager) { $entityManager->getEventManager()->addEventListener( [Events::prePersist, Events::preUpdate],