背景:近期使用Laravel-5.4进行项目开发时涉及到关联模型的数据操作,想到用事务回滚。中间涉及到数据引用及异常的捕获。

数据库事务回滚有两种方式:自动回滚、手动回滚。

举例如下:

自动回滚

function(Request$request){DB::transaction(function()use($request){try{$admin=Admin::create(['name'=>$request->name,'password'=>encrypt($request->password),'email'=>$request->email]);$admin->roles()->attach($request->role_id);//$admin->roles()->attach('sd');//故意输入错误参数类型,commit失败return'success';}catch(\Exception$exception){return$exception->getMessage();}});}

需要使用use 引用请求数据$request。否则报错 "Undefined variable:request"


手动回滚

function(Request$request){DB::beginTransaction();try{$admin=Admin::create(['name'=>$request->name,'password'=>encrypt($request->password),'email'=>$request->email]);$admin->roles()->attach($request->role_id);DB::commit();return'success';}catch(\Exception$exception){DB::rollBack();return$exception->getMessage();}}