【tp5】事物和锁(处理商业类业务,高并发业务)


1、不废话,直接上代码:

// 启动事务
            Db::startTrans();
            try{
                Db::name('student')->lock(true)->where(['sno'=>session('user')['user_login']])->update(['graduation'=>1]);
                Db::name('student_unit')->lock(true)->where(['sno'=>session('user')['user_login']])->update(['unit_company'=>$param['unit_company'],'status'=>1,'remark'=>'学生申请','update_time'=>time()]);
                // 提交事务
                Db::commit();
            } catch (\Exception $e) {
                // 回滚事务
                Db::rollback();
                $this->error('申请异常,请稍后重试或联系管理员');
            }
            $this->success('您的申请已提交成功,请等待管理员审核');

2、如果有查询,也需要带上lock(true),跟TP3.2的用法一致

3、附上另一种事物处理方式:

// 方式2:根据操作的返回值判断是否成功
            //启动事务
//             Db::startTrans();
//             $result = Db::name('student')->where(['sno'=>session('user')['user_login']])->update(['graduation'=>1]);
//             $result2 = Db::name('student_unit')->where(['sno'=>session('user')['user_login']])->update(['unit_company'=>$param['unit_company'],'status'=>1,'remark'=>'学生申请','update_time'=>time()]);
//             if($request && $result2){
//                 Db::commit();
//                 $this->success('您的申请已提交成功,请等待管理员审核');
//             }else{
//                 Db::rollback();
//                 $this->error('申请异常,请联系管理员');
//             }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM