如果在数据库操作过程中出现任何错误,回滚查询始终是对你的数据的一种保护。例如, 在执行多个删除命令或类似的, 一个保存命令在使用更新的情况下.Laravel开箱即用的回滚功能,使用起来特别简单。
回滚雄辩的答案是使用一个静态DB::transaction ,包裹着你的数据库执行代码。这个对你的标准控制器代码的补充看起来像下面的 "包装函数"。
DB::transaction(function () use ($product) { // Start the transaction
// Do stuff here
}); // End transaction
你可以使用use 操作符传入变量,这样你就不必把所有的代码都包裹在事务里面。
在下面的例子中,我将展示围绕保存(更新)数据库记录的回滚保障,使用一个通用的更新控制器函数调用。
例子
public function update(Request $request, $id)
{
$product = Product::findOrFail($id);
// Validate the inputs
$request->validate([
'name' => 'required',
]);
$product->name = $request->get('name');
DB::transaction(function () use ($product) { // Start the transaction
$product->save();
}); // End transaction
return view('products.index');
}
这就是字面上的意思, 神奇的事务函数将注意到数据库的任何变化,如果有一个故障,它将简单地回滚到原始状态。另一个Laravel Eloquent的救命稻草, 快速和容易使用,并有效地完成工作。