Doctrine – Entity manager is closed, reset entity manažeru po chybě

aliamjid
Člen | 8
+
0
-

Zdravím,

je způsob jak v rámci doctrine v nette řešit chybu Entity manager is closed?

zjednodušený case:

try {
 $this->em->flush($entity); //vyhodí chybu a tím se uzavře entity manager
} catch ($e) {}
$this->em->flush($entity2); //exception - entity manager is closed

V symfony by se toto dalo řešit takto

try {
 $this->em->flush($entity); //vyhodí chybu a tím se uzavře entity manager
} catch ($e) {
 $this->doctrine->resetEntityManager();
}
$this->em->flush($entity2); //projde

Editoval aliamjid (15. 9. 2022 19:52)

Petr Parolek
Člen | 455
+
-2
-

Ahoj, zkusil bych

$this->em->refresh($entity);

viz ukázka https://www.strangebuzz.com/…modification

Daewoo
Člen | 37
+
0
-

Nejčastější příčinou je, když ti vyhodí queryna chybu na úrovni databáze. Entity manager se uzavře a všechny následné pokusy ho používat spadnou do této chyby. Refresh ani clear nepomůžou, není k dispozici metoda, která by připojení znovuotevřela. Řešením je tedy v logu najít první chybu od Doctriny a tu opravit. Někdy to může být chyba syntaxe, někdy constraints chyba, jindy zase chyba při provádění async operací atd.

Symfony/Doctrina na to má metodu resetManager, ale ta v Nette/Nettrine neexistuje – nevím, jak manager tady reinicializovat.

Editoval Daewoo (2. 12. 21:46)

Felix
Nette Core | 1245
+
+2
-

Je na to otevreny PR. Pridame to tam.