2016-08-07 46 views
0

Ich versuche Laravel-Transaktion zum ersten Mal ... Ich mache die meisten meiner Abfragen mit Eloquent und da keine Transaktion gibt es eine Mischung aus Eloquent und Abfrage-Generator.Transaktion funktioniert nicht auf Truncate

Hier ist mein Code:

DB::beginTransaction(); 

try{ 
    Setting::truncate(); 
    Setting::insert($data); 
    DB::commit(); 
    jok('all ok'); 

} 
catch (\Exception $e) 
{ 
    DB::rollback(); 
    jerror('some error accorded! '); 
} 

Also habe ich gebunden einige ungültigen Daten auf Einstellungen, und ich habe die some error accorded Fehler hinzufügen, wie erwartet, aber die Abfrage vor dem INSERT Setting::truncate(); wurde trotzdem ausgeführt und ich landete mit eine leere Tabelle.

Also entweder mache ich etwas falsch oder die Transaktion funktioniert nicht auf Abschneiden.

Antwort

4

TRUNCATE TABLE in einer Datenbanktransaktion verursacht eine implizite COMMIT-Aktion. hat DELETE nicht das gleiche Verhalten, so können Sie sicher

DELETE FROM tblname 

Dies wird klar, Tisch und immer noch halten die gewünschte Rollback-Funktion einer Transaktion ausführen.

Siehe die MySQL-Dokumentation zu TRUNCATE. Die Aufzählungspunkte erklären diese Funktionalität http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html