①②③三件事务要同时完成,不报错,结果都不为空,才会走到commit()提交事务。否则,调到catch进行回滚,并返回失败信息 /** * 修改订单付款状态 */ public function changeOrderStatus($request
          /**
     * 修改订单付款状态
     */
    public function changeOrderStatus($request){
        $id = $request['id'];     //获取订单id
        $where['id'] = $id;
        $rechargeinfo = $this->getOne($where);    //根据id获取该条订单详细信息
        if($rechargeinfo['actual_arrival']!=0){   //如果表中字段不为0,则说明已经到账,无法再次确认
            $ajaxData['status'] = 0;
            $ajaxData['msg'] = '已确认过,无法重复提交';
            return $ajaxData;
        }
        $data['updated_at'] = date('Y-m-d H:i:s');
        //开启事务处理
        $this->start();
        try{
        //①更新付款状态
            switch($rechargeinfo['type']){
                case 1:
                $coin_type = 'eth';      //教育币
                break;
                case 2:
                $coin_type = 'btc';      //比特币
                break;
                default:
                $coin_type = 'none';
            }
        $settingmodel = new Setting();  //实例化设置表模型,用于通过币种获取比例
        $res3 = $settingmodel->getOne(array('name'=>$coin_type));
        $bili = $res3['value'];         //得到该币种的比例
        $amount = $rechargeinfo['amount'];    //提交货币数量
        $data['actual_arrival'] = $amount;     //实际到账数量
        $data['state'] = '到账成功!';
        $res = $this->up($where, $data);    //更新recharge表数据
        //②member表edu入库
        $membermodel = new Member();
        $where2['id'] = 2;
         if($coin_type=='eth'){
             $edu_amount = $amount;     //如果是教育币直接入库
         }else{
             $edu_amount = $amount*$bili;   //如果是比特币就转成教育币
         }
        $membermodel->up($where2, array('edu_amount'=>$edu_amount));   //导入用户个人账户
        //③充值日志
        $logmodel = new Log();   //实例化log模型用于调用addlog函数
        $logmodel->addLog($rechargeinfo,1);  //1 充值  2 提现
            
        $this->commit();
        }catch (\Exception $e){
            $this->rollBack();
            //echo $e->getMessage();die();
            $ajaxData['status'] = 0;
            $ajaxData['msg'] = '确认到账失败!';
            return $ajaxData;
        }
        $ajaxData['status'] = 1;
        $ajaxData['msg'] = '确认到账成功!';
        return $ajaxData;
    }
     public function start()
    {
        DB::beginTransaction();
    }
    public function commit()
    {
        DB::commit();
    }
    public function rollBack()
    {
        DB::rollBack();
    }
        
        