背景:近期使用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();
}
}
亿速云「云数据库 MySQL」免部署即开即用,比自行安装部署数据库高出1倍以上的性能,双节点冗余防止单节点故障,数据自动定期备份随时恢复。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。