laravel 事务处理逻辑

前言:
在操作数据库中,实现一个功能时有时候会多次操作数据库,
在多次操作数据库时,就会有可能出现其中一条sql语句执行成功,而另一条sql语句执行失败。
这样的话就会出现很严重的问题,所以可以用MySQL的事务处理来解决这个问题。

!!:在处理多表操作的时候一般是需要用到事务处理的!

//1、开启事务
DB::beginTransaction();
try{
	//2、执行成功时提交事务
	DB::commit();
}catch(\Exception $exception){
	//3、执行成失败时回滚
	DB::rollBack();
}

注意:
其中要注意一点的是,catch里面的抛出异常,Exception前面要加上一个‘\’,不然的话在框架里面他会找不到这个类,然后就不会抛出异常。框架就会直接报错,起不到事务的作用。

//用户注册demo 
<?php
namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class LoginController extends Controller
{
	public function register(Request $request)
	{
			$rules = [
	            'mobile' => 'required',//laravel-sms
	            'password' => 'required|confirmed|min:8',
	        ];
	        
        $msg = [
            'mobile.required' => '请输入手机号码',
            'password.required' => '请输入密码',
        ];
        
        $validator = Validator::make($request->all(), $rules, $msg);
        if ($validator->fails()) {
            $this->throwValidatorException($validator);
        }
        
        $mobile = $request->input('mobile');
        $password = $request->input('password');
        
        //手机号码查重
        $user = User::where('mobile', $mobile)->first();
        if ($user) {
            return $this->errorWithInfo('手机号码已存在');
        }
        
        DB::beginTransaction();
        try{
        	$user = User::create([
                'mobile' => $mobile,
                'password' => Hash::make($password),
            ]);
            
			//用户仓库,创建用户的时候 赋予用户道具 土地等属性(在仓库表中体现)
            UserTool::create([
                'uid' => $user->id,
                'tool_id' => Daoju::TOOL_SEEDER,
                'pay_time' => Carbon::now()->timestamp,
                'nums' => 1,
            ]);
            DB::table('oauth_access_tokens')->where('user_id', $user->id)->update(['revoked' => 1]);
            DB::commit();
            return $this->proxy($mobile, $password);
            
        } catch (\Exception $exception) {
        
            DB::rollBack();
            return $this->errorWithInfo($exception->getMessage());
        }
	}
	
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值