zoukankan      html  css  js  c++  java
  • TP5 多个表使用事务,千万不要用助手方法,不然你想哭

    这两天一直再纳闷,明明建立了事务,为什么 throw new Exception 之后事务一直都没有效!

    一开始以为是 throw new Exception 的问题,百度查了一些资料说使用 RuntimeException ,试了之后还是不行!

    再去检查数据库引擎是不是innodb,确认了几次,都发现没错!可是事务愣是没效果。。。

    换种方式百度一下:tp5多表事务发现,人家全是用模型。然后自己再试了一下,终于可以了。。。

    错误方法:

            $data = [
                'name' => "123",
                'value' => "1",
            ];
    
            $data1 = [
                'name' => "234",
                'value' => "23",
            ];
    
            $data2 = [
                'name' => "456",
                'value' => "4",
            ];
    
            db()->startTrans();
            try{
    
                $res = db("Test")->insertGetId($data);
                $res1 = db("Test1")->insertGetId($data1);
                $res2 = db("Test")->insertGetId($data2);
                if($res2){
                    throw new Exception("1");
                }
    
                db()->commit();
            }catch (Exception $e){
                db()->rollback();
                echo $e->getLine().$e->getMessage();
            }
    

      

    正确方法(一定要先建模型,空的模型也可以):

            $data = [
                'name' => "123",
                'value' => "1",
            ];
    
            $data1 = [
                'name' => "234",
                'value' => "23",
            ];
    
            $data2 = [
                'name' => "456",
                'value' => "4",
            ];
    
            Db::startTrans();
            try{
    
                $res = model("Test")->insertGetId($data);
                $res1 = model("Test1")->insertGetId($data1);
                $res2 = model("Test")->insertGetId($data2);
                if($res2){
                    throw new Exception("1");
                }
    
                Db::commit();
            }catch (Exception $e){
                Db::rollback();
                return $this->getReturnResult($e->getLine().$e->getMessage(),500);
            }
    

      

    附上两个模型:

    <?php
    
    
    namespace appapimodel;
    
    use thinkModel;
    
    class Test1 extends Model
    {
    
    }
    

      

    <?php
    
    namespace appapimodel;
    
    use thinkModel;
    
    class Test extends Model
    {
    
    }
    

      

  • 相关阅读:
    机试笔记1
    ZOJ 3846 GCD Reduce//水啊水啊水啊水
    最短路练习
    CodeForces 632C The Smallest String Concatenation//用string和sort就好了&&string的基础用法
    HDOJ 5667 Sequence//费马小定理 矩阵快速幂
    HDOJ 5666//快速积,推公式
    HDOJ 5672//模拟
    网络流相关知识点以及题目//POJ1273 POJ 3436 POJ2112 POJ 1149
    南理第八届校赛同步赛-C count_prime//容斥原理
    python之shutil模块使用方法
  • 原文地址:https://www.cnblogs.com/zwb121/p/11587229.html
Copyright © 2011-2022 走看看