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 ]
关于 LearnKu
感觉跟版本没关系 是你表有问题
我遇到过类似的,但是我是在阿里云的环境下
``
1、和php版本没什么关系,主要是云数据库的策略配置问题
2、我出现的场景是使用的save 方法(save的字段和原数据一致没有改变时) 或者里面只有select 的情况下会出现这个问题
3、我的结论是云数据库在commit的时候走到其他的库,因为在策略的时候可以配置 至少阿里的polardb可以
4、另外laravel的开启事务不一定是真开启吧,我记得他只是自己进行计数
5、你这种直接insert 的情况我还没遇到过报错
6、我是在swoole +octane 下会出现这个问题, fpm下不会出现
``