TP5之事务处理

事务: 执行完A事件然后执行B事件,AB事件都执行完才算完成。可是有时候由于某些因素,A事件执行完,还没来得及执行B事件。怎么办?就需要回到A事件执行前。这种事情多见于电商支付功能。
mysql事务要求数据库引擎必须是innoDB

自动控制事务处理:

  public function delete(){
        //由于第二条语句写的有问题,只执行第一条
        Db::table('user')->delete(1038);
        Db::table('user')->deletesssssss(1039);

        //由于第二条写的有问题,两条删除都不执行
        Db::transaction(function(){
            Db::table('user')->delete(1040);                    
            Db::table('user')->deletesssssss(1041);
        });
    }

手动控制事务

public function delete(){
        // 启动事务
        Db::startTrans();
        try{
            $res=Db::table('user')->delete(1039);
            if(!$res){
                throw new \Exception('删除失败');
            }else{
                throw new \Exception('删除成功');
            }
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
             dump($e->getMessage());
            // 回滚事务
            Db::rollback();
            //注意:我们做了回滚处理,所以id为1039的数据还在
        }
    }
posted @ 2018-06-25 22:49  我的网名  阅读(26)  评论(0)    收藏  举报