事务在truncate上不起作用

时间:2016-08-07 10:46:43

标签: laravel transactions laravel-5.2

我第一次尝试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! ');
}

所以我已经绑定到向Settings添加一些无效数据了,我得到了some error accorded错误,但是INSERT Setting::truncate();之前的查询仍然执行了,最后我得到了一个空表。 / p>

所以要么我做错了,要么交易不能用于截断。

1 个答案:

答案 0 :(得分:7)

数据库事务中的 TRUNCATE TABLE将导致隐式COMMIT操作。 DELETE没有相同的行为,因此您可以安全地运行

DELETE FROM tblname

这将清除您的表并仍然保持事务的所需回滚功能。

请参阅TRUNCATE上的MySQL文档。要点解释了此功能http://dev.mysql.com/doc/refman/5.7/en/truncate-table.html