执行 DB::insertGetId() 方法,返回了 id,但是数据库却没有记录?

遇到一个奇怪的问题

$res = DB::table('user')->insertGetId($attributes);

这时 $res 返回值是自增 id ,但是数据库中却没有记录,并且下一次再执行的时候 $res 还会 +1。

我尝试了用事务提交,但是没有效果。

但是在 tinker 中是可以添加的,如果上面的 $res 返回 2 在 tinker 中更新数据设定 id 也为 2,是可以添加成功的,现在怀疑数据库有回滚,不知道对不对,请问我应该从哪方面来排查?

感谢。

悲观者永远正确,乐观者永远前行。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

记一下 insert 语句失效的原因,大概有3点:

  1. 数据开启了事务,但是没有提交
  2. 发生错误,没有用 try catch 捕捉,导致数据回滚
  3. SQL语句已经拼接好,但是并没有执行
3年前 评论
讨论数量: 3

记一下 insert 语句失效的原因,大概有3点:

  1. 数据开启了事务,但是没有提交
  2. 发生错误,没有用 try catch 捕捉,导致数据回滚
  3. SQL语句已经拼接好,但是并没有执行
3年前 评论

问题解决了,跟 insertGetId 没关系,是这条 DB 语句之后的一个语句发生错误了,没有用 try catch 捕捉,导致数据回滚了。

3年前 评论

原来回滚之后 最大自增 id 不会回滚的

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!