专栏首页TLingC's ZoneThinkPHP 6 多模型下事务处理

ThinkPHP 6 多模型下事务处理

mysql下,事务不是针对某个特定的表或者特定的模型的,因此在多模型的情况下,不需要针对每个模型分别startTranscommitrollback。即使模型中有继承startTrans方法,可以通过Model::startTrans();启动事务,但其作用等同于Db:startTrans();。因此可以直接写为以下形式。

通过测试,在出现异常时,通过图中自增值可看出(自增值在rollback时也会增加),三个模型尝试新增数据都被rollback。同时把Table3中的name字段改为test233的操作也没有成功。

<?php
namespace app\controller;

use app\BaseController;
use app\model\Table1;
use app\model\Table2;
use app\model\Table3;

use think\Exception;
use think\facade\Db;

class Test extends BaseController
{
    public function index(){
        Db::startTrans();
        try{
            $table1 = new Table1();
            $table1->save([
                'name' => 'test1'
            ]);

            $table2 = new Table2();
            $table2->save([
                'name' => 'test2'
            ]);

            $table3 = new Table3();
            $table3->save([
                'name' => 'test3'
            ]);

            $test = Table3::where('name', 'test3')->find();
            $test->name = 'test233';
            $test->save();

            throw new Exception('test exception');
            Db::commit();
        } catch (\Exception $e) {
            Db::rollback();
        }
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • framework7框架中tab页面下拉刷新方案

    最近在使用framework7框架开发web app,发现在tab页面中直接定义多个ptr-content会导致异常。最后绑定用户点击tab的事件,动态解绑/绑...

    TLingC
  • 让ThinkPHP 6.0语言包支持多级分组

    最近在做一个多语言网站项目,需要给一个多级导航栏编写语言包。虽然ThinkPHP 6.0多语言功能引入了语言分组,但其分组最深只能支持两层,在如我的这种情况下无...

    TLingC
  • Docker 19.03 设置Docker Hub镜像地址

    在 Docker 19.03 中,通过修改/etc/default/docker文件:

    TLingC
  • 前端基础-Vue.js实例对象

    通过打印实例对象发现,其中 el 被Vue 放入了公有属性中,而data 则被放入了 私有属性中,而 data 中的数据,需要被外部使用,于是 Vue 直接将d...

    cwl_java
  • CDN 学习中的一点小思考

    近段时间学习CDN,同时也在尝试着做一些项目,熟悉腾讯云的基本产品知识,在学习的过程中,也串联和扩展思考了一下,例如想搞清楚一些很容易犯迷糊的问题,例如回源ho...

    张小波
  • Django+xadmin打造在线教育平台(四)

    代码 github下载 七、授课机构功能 7.1.模板继承 (1)创建母板 把org-list.html拷贝到templates目录下,新建base.html...

    zhang_derek
  • 老牌大型门户网站多年经验——搜狐服务架构优化

    内容来源:2017 年 08 月 10 日,搜狐研发中心架构师陈伟在“第二届APMCon中国应用性能管理大会”进行《搜狐服务架构优化实践》演讲分享。IT 大咖说...

    IT大咖说
  • cssjshtml vue.js 多级路由

    葫芦
  • SpringBoot2.x快速入门指南(一)

    demo.zip解压之后记得复制下demo文件夹放的路径 在此用的开发工具是IntelliJ IDEA 下面是导入流程: IDEA里点击File -> Open...

    拾荒者的笔记
  • Java 类机制(3)---- 类文件结构

    ​ 在上一篇文章中我们一起来看了一下 Java 虚拟机的类加载过程,包括虚拟机加载、验证、准备、解析和初始化 5 个大步骤,同时我们还讨论了 Java 虚拟机...

    指点

扫码关注云+社区

领取腾讯云代金券