2016-08-07 11 views
0

私はLaravelトランザクションを初めて試みています...私はEloquentでほとんどのクエリを行います。そこにトランザクションがないので、Eloquentとクエリビルダーが混在しています。ここでトランザクションはトランケートでは機能しません

は私のコードです:

DB::beginTransaction(); 

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

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

だから私は設定にいくつかの無効なデータを追加するために結ばれてきましたし、予想通り、私はsome error accordedエラーを得たが、INSERT Setting::truncate();前にクエリをとにかく実行されたと私は終わりました空のテーブル

私は何か間違ったことをしているか、トランケートでトランザクションが機能しません。

答えて

4

データベーストランザクション内のTRUNCATE TABLEは、暗黙のCOMMITアクションを引き起こします。あなたは安全にこれがあなたのテーブルをクリアして、まだ取引の所望のロールバック機能を維持します

DELETE FROM tblname 

を実行できるようにDELETEは、その同じ動作を持っていません。

TRUNCATEに関するMySQLのドキュメントを参照してください。要点はこの機能を説明していますhttp://dev.mysql.com/doc/refman/5.7/en/truncate-table.html

関連する問題