2016-08-07 1 views
0

Я пытаюсь выполнить транзакцию Laravel в первый раз ... Я выполняю большинство своих запросов с Eloquent, и поскольку там нет транзакций, мне нужно сделать смесь Eloquent и query builder.транзакция не работает на truncate

Вот мой код:

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 не имеет такое же поведение, так что вы можете смело запускать

DELETE FROM tblname 

Это очистит вашу таблицу и сохранить требуемую функцию отката транзакции.

См. Документацию по MySQL в TRUNCATE. Точки пули объясняют эту функциональность http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html

Смежные вопросы