使用Laravel Eloquent回滚事务的代码实例

155 阅读1分钟

如果在数据库操作过程中出现任何错误,回滚查询始终是对你的数据的一种保护。例如, 在执行多个删除命令或类似的, 一个保存命令在使用更新的情况下.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的救命稻草, 快速和容易使用,并有效地完成工作。