laravel想要在一个数据库事务中运行一连串操作,可以使用DB门面的transaction方法,如果事务闭包中抛出异常,事务将会自动回滚。如果闭包执行成功,事务将会自动提交。使用transaction方法时不需要担心手动回滚或提交:
DB::transaction(function () {
DB::table('users')->update(['votes' => 1]);
DB::table('posts')->delete();
});
如果你想要手动开始事务从而对回滚和提交有一个完整的控制,可以使用DB门面的beginTransaction方法:
DB::beginTransaction();
你可以通过rollBack方法回滚事务:
DB::rollBack();
最后,你可以通过commit方法提交事务:
DB::commit();
laravel中使用查询构建器或者Eloquent ORM执行query时,如果失败会返回 Illuminate\Database\QueryException 异常
try{
//代码区
}catch(\Illuminate\Database\QueryException $e){
//异常处理
}
try{
DB::transaction(function ()use($id,$data) {
DB::table('hy_procurement_supplier')-> where('id',$id) -> update($data);
});
}catch(\Illuminate\Database\QueryException $ex){
return back() -> with(['info' => '抱歉,修改失败,请稍后重试!']);
}
return redirect('admin/buy/supplier') -> with(['info' => '修改成功']);
DB::beginTransaction(); //事务开始
try {
//代码区
DB::commit(); //提交事务
} catch(\Illuminate\Database\QueryException $ex) {
DB::rollback(); //回滚事务
//异常处理
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章