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 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

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

1年前 评论
讨论数量: 1

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

1年前 评论

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