Wie funktioniert Zend\Db in ZF2 Kontrolle von Transaktionen?
Den ZF1 Zend_Db Referenz-Handbuch hat eine gesamten Abschnitt auf die Durchführung von Transaktionen.
Den ZF2 Zend\Db Referenz-Handbuch fehlt jegliche Dokumentation, die auf Transaktionen.
Wie kann ich die durchführen von Transaktionen in ZF2? Beispiel-code wäre hilfreich.
InformationsquelleAutor der Frage Greg.Forbes | 2012-12-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die fehlende Dokumentation ist neugierig.
Finden Sie heraus, was passiert ist, ich musste Tauchen Sie ein in die API-docs für Zend\Db\Adapter.
Sieht es aus wie
beginTransaction
rollback
undcommit
definiert sind Zend\Db\Adapter\Driver\ConnectionInterface. Dies bedeutet, dass Sie sind Methoden aufrufbar über jeden einzelnen adapter Verbindung. Leider ist die Verbindung selbst ist eher begraben.Was ich bin mir nicht klar, auf -- und kann nicht als Beispiel für die um diese Zeit -, ist, herauszufinden, welches Objekt Sie eigentlich nennen diese Methoden auf. Im schlimmsten Fall sieht es aus wie Sie vielleicht möchten, rufen Sie
$adapter->getDriver()->getConnection()->beginTransaction()
.Eww.
Ich hoffe, dass jemand anderes mit mehr wissen, und eine Kopie des ZF2 handlich, sehen das und bieten eine bessere option.
Vergessen Sie nicht, dass Sie nur Problem
BEGIN TRANSACTION
/ROLLBACK
/COMMIT
/SET autocommit=...
SQL-Anweisungen selbst. Dies ist wahrscheinlich OK, es sieht nicht wie Zend\Db Spur hält, die Transaktion.InformationsquelleAutor der Antwort Charles
Du hast es. Die richtige Art und Weise zu Begin, Commit und Rollback von Transaktionen ist wie folgt:
Nur um ihn auch dort erhalten Sie auch die Letzte ID erstellt von:
Wenn Sie mit pgSQL, müssen Sie die Sequenz zur Rückkehr der Letzten ID erstellt:
InformationsquelleAutor der Antwort Diemuzi
Gibt es zwei Sache zu tun Transaktion.
1 - MyISAM ist nicht eine Transaktions-engine , so ändern Sie Tabellen-engine auf InnoDB.
2 - Transaction query(
"START TRANSACTION;"
ODER"ROLLBACK;"
) Anschluss muss gleich sein mit anderen Abfragen(Insert oder Update).Für das tun dies in ZF2 sollte man die aktuellen db-adapter und verwenden Sie es für alle Abfragen.
Dieser code wird nicht funktionieren richtig :
Seit
$this->getAdapter()->getDriver()->getConnection()
Schafft neue db-Verbindung.Verwenden Sie folgenden code, statt:
Für Sie prüfen, ob Ihre verbindungen korrekt sind , aktivieren Sie einfach query log in der mysql.
Nach ausführen der Abfrage werden Sie sehen, Verbindung, Zahl, bevor Sie jede Abfrage im mysql-log.Die müssen gleich in alle Transaktion Abfragen.
InformationsquelleAutor der Antwort Mohamad Rostami