自动增量ID在Laravel中回滚

时间:2018-08-07 09:14:22

标签: laravel

我想在Laravel 5.6中的交易失败后从多个mysql表中回滚或重置自动增量ID。

DB::beginTransaction();
 try {

  //My Database Queries goes here

  DB::commit();
 }

catch (\Exception $e) {

       DB::rollback();
     }

我只是想要的,我想在此处编写一些查询以回滚自动增量ID

catch (\Exception $e) {

   DB::rollback();
 }
在执行DB::rollback()之后

有人能建议我这样做吗?。

2 个答案:

答案 0 :(得分:0)

我认为您想删除该表的所有行,如果是,这是实现此目的的方法:

DB::table('YOURTABLE')->truncate();

答案 1 :(得分:0)

要严格回答您的问题,我认为您应该首先找到AI列的最大值(例如,名为id)

SQL:

  SELECT MAX(id) FROM yourTable;

在Laravel中

  $maxId = DB::table('yourTable')->max('id');

然后重置自动增量值:

SQL:

  ALTER TABLE yourTable AUTO_INCREMENT=$maxId;

在Laravel中

 DB::statement("ALTER TABLE yourTable AUTO_INCREMENT=$maxId");

无论如何,我会小心您的所作所为。 以防万一您认为要依赖AI id列。...看看MySQL AUTO_INCREMENT does not ROLLBACK

否则,如果只是担心不要随着id值的增长而变大,因为您有成千上万次失败的事务...这可能是一种优化,但是在这种情况下,我将完全摆脱id列...