DB事务报错:There is no active transaction

DB::transaction(function () {
    DB::table('test')->insert([
       'type' => 'abc',
       'name' => 'test',
       'code' => '12346'
    ]);
});

如上这段测试代码,不同环境下的测试结果如下:

Laravel PHP Mysql 测试结果
8.x 7.4 本地5.7 正常
8.x 7.4 华为云 DDM 5.7 正常
10.x 8.2 本地5.7 正常
10.x 8.2 华为云 DDM 5.7 报错
12.x 8.4 本地5.7 正常
12.x 8.4 华为云 DDM 5.7 报错

现在不知道怎么排查了,不确定是Laravel版本的问题还是PHP版本的问题,还是华为云DDM的问题,请求各位大神支招,感谢!

正在努力学习的小逗比 [ dobeen.net ]
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

感觉跟版本没关系 是你表有问题

2个月前 评论
Mutoulee (楼主) 2个月前

我遇到过类似的,但是我是在阿里云的环境下
``
1、和php版本没什么关系,主要是云数据库的策略配置问题

2、我出现的场景是使用的save 方法(save的字段和原数据一致没有改变时) 或者里面只有select 的情况下会出现这个问题

3、我的结论是云数据库在commit的时候走到其他的库,因为在策略的时候可以配置 至少阿里的polardb可以

4、另外laravel的开启事务不一定是真开启吧,我记得他只是自己进行计数
5、你这种直接insert 的情况我还没遇到过报错
6、我是在swoole +octane 下会出现这个问题, fpm下不会出现
``

2个月前 评论

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