laravel框架的DB::rollback()
DB::beginTransaction();
try
{
//数据库
insert into TableA;
update TableB;
if(true) {
throw new \Exception('ErrMsg');
}
} catch(Exception $e) {
DB::rollback();
//addLog 日志记录
return false;
} finally {
DB::commit();
}
return true;
现在发现一个问题,进入到catch模块的时候,日志记录下来了,然后tableA插入记录也插入进去了
貌似DB::rollback(),并没有回滚成功,有人在工作中遇到过这种状况嘛??
求分享啊,,,
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
finally的作用 写个测试代码就知道了
结果
很明显了, catch 里面 rollback 其实是运行了,然后 finally 里 也 commit
至于为什么 rollback 了还可以 commit ,这个我就不清楚了。
你要先打开事务啊
两种可能。
finally不管是程序正常执行还是有异常,在字节码层面都会把finally中的代码编译在正常和异常代码后面,所以有多少个catch,finally代码就会多编译多少次,并且return指令都是在finally中的代码执行完成后才执行!
需要注意的是如果 finally 里包含 return,那么会覆盖 try 或 catch 里的return。