背景:近期使用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();        }    }