Laravel 10事务报错There is no active transaction

1. 运行环境

1). 当前使用的 Laravel 版本?

10.1.5

2). 当前使用的 php/php-fpm 版本?

PHP 版本:8.2.1

php-fpm 版本:

3). 当前系统

Windows 10

4). 业务环境

开发环境

5). 相关软件版本

2. 问题描述?

laravel5的一个旧项目想要升级到最新laravel10,在事务提交的commit的位置报错:“There is no active transaction”

DB::beginTransaction();

try {
    $ins = ModTbModel::Create($modtb);//插入数据表
    $id=$ins->tb_id;
    $this->createModTable($createname,'1');//
    ModTbModel::addModTbSysFields($id,$tb_name);//
    DB::commit();//此处报错
    return back()->with('msg','添加成功');
} catch (Exception $e) {
    DB::rollback();
    return back()->with('msg','添加失败');
    throw $e;
}

查看了try里的sql内容发现createModTable()方法里也有一个事务提交,认为可能是里面commit过了引起的。就去掉了里面的事务处理。重新测试发现无效,看来应该不是和这个有关。对于这个问题该如何处理呢?看起来数据库的操作都是成功执行了的,可以直接抑制错误的显示吗?

3. 您期望得到的结果?

错误提示消失

4. 您实际得到的结果?

There is no active transaction

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

createModTable 看起来是一个创建表的操作? DDL 操作会自动 commit 事务的。

2年前 评论
讨论数量: 1

createModTable 看起来是一个创建表的操作? DDL 操作会自动 commit 事务的。

2年前 评论

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