Das eloquente ORM ist ganz nett, obwohl ich mich frage, ob es eine einfache Möglichkeit gibt, MySQL-Transaktionen mit innoDB auf die gleiche Weise wie PDO einzurichten, oder ob ich das ORM erweitern müsste, um dies zu ermöglichen?
96
Discussed in more detail here
Link ist tot.Wenn Sie keine anonymen Funktionen mögen:
Update : Für Laravel 4 ist das
pdo
Objekt nicht mehr öffentlich, also:quelle
DB::beginTransaction()
&DB::commit()
& verwendenDB::rollback()
. Das wäre etwas sauberer.DB::connection()->getPdo()->beginTransaction();
DB::transaction
Rückruf mit noch sauberer ist, aber der Nachteil ist, dass Sie, wenn Sie verschiedene Handler für verschiedene Ausnahmen angeben müssen, zur Try / Catch-Technik zurückkehren müssenWenn Sie Eloquent verwenden möchten, können Sie dies auch verwenden
Dies ist nur ein Beispielcode aus meinem Projekt
quelle
question->id
Ausdruck beim Transaktionsrückruf gibt Null zurück.Wenn Sie Verschlüsse vermeiden möchten und gerne Fassaden verwenden, hält Folgendes Folgendes für schön und sauber:
Wenn Anweisungen fehlschlagen, wird Commit niemals ausgeführt und die Transaktion wird nicht verarbeitet.
quelle
Ich bin sicher, Sie suchen keine Verschlusslösung. Versuchen Sie dies für eine kompaktere Lösung
quelle
Aus irgendeinem Grund ist es ziemlich schwierig, diese Informationen irgendwo zu finden, deshalb habe ich beschlossen, sie hier zu veröffentlichen, da mein Problem, obwohl es sich auf eloquente Transaktionen bezog, dies genau änderte.
Nach der Lektüre THIS Stackoverflow Antwort, erkannte ich meine Datenbank - Tabellen MyISAM statt InnoDB verwendet wurden.
Damit Transaktionen auf Laravel (oder an einem anderen Ort, wie es scheint) funktionieren, müssen Ihre Tabellen InnoDB verwenden
Warum?
Zitieren von MySQL- Transaktionen und Atomic Operations- Dokumenten ( hier ):
quelle
Wenn eine Ausnahme auftritt, wird die Transaktion automatisch zurückgesetzt.
Laravel Basic Transaktionsformat
quelle