eingebunden wird Ich habe eine Doktrin EntityListener eingerichtet. Ich muss einen Code im postRemove
Ereignis ausführen, das aus keiner Doktrin-Transaktion herauskommen muss. Allerdings:Verhindern, dass Doctrine EntityListener postRemove in die Transaktion
public function postRemove(Image $image, LifecycleEventArgs $event)
{
$isActive = $event->getEntityManager()->getConnection()->isTransactionActive();
dump($isActive);
}
immer Dumps wahr.
Egal ob ich commit oder flush innerhalb der postRemove() Methode; Ich habe versucht, die Transaktion in preRemove() zu starten und in postRemove() zu committen, aber das hilft nicht.
Frage: Gibt es eine Möglichkeit, zu verhindern, dass Doctrine postRemove() in die Transaktion einpackt? Wenn nein, was ist der beste Weg für mich, einen Code auszuführen, der keine Transaktionen enthält? Es ist mir egal, ob es sofort passiert oder auf Kernel terminiert, solange es schließlich passiert.
Ich habe eine Idee, eine Destruktor-Methode in der EntityListener zu erstellen, und führen Sie den Code, wenn Listener zerstört, aber ich weiß nicht, wie zuverlässig das wäre. Vielleicht gibt es andere (bessere) Möglichkeiten?
danke!
Die docs sagen, dass EntityManager :: Flush() innerhalb onFlush Ereignis Aufruf ist auch eine schlechte Idee. Mein Problem ist: Wenn ich ein neues Bild persistiere, möchte ich mehrere Formate dieses Bildes erstellen, diese Formate im Dateisystem speichern und Referenzen (Zeilen) auf diese Dateien in einer anderen Tabelle haben. Um keine Inkonsistenzen zwischen Dateisystem und Datenbank zu haben, muss ich nach jeder fs-Schreiboperation löschen. Aber es stellt sich heraus, dass ich weder in pre/postPersist, noch in onFlush spülen kann? – Karolis
Vielleicht ist es eine schlechte Idee, all diese Arbeit im EntityListener zu erledigen? – Karolis
Sie müssen nicht flush aufrufen, Sie verwenden die unitofwork, um Änderungen vorzunehmen und persistieren Sie, dann erneut berechnen, set, done. Hier ist ein Beispiel aus einer anderen Frage, die ich beantwortet habe: http://stackoverflow.com/questions/30734814/persisting-other-entities-inside-preupdate-of-doctrine-entity-listener/30741471#30741471 - das funktioniert, ich benutze es in Live-Produktionssysteme. – Richard