laravel - Laravel 7.x 数据库事务自动提交,没有 commit() 命令
问题描述
我有一个使用查询生成器将记录插入数据库的函数。我想手动使用事务。
但是记录被插入数据库而不调用该commit()
函数。我不知道为什么;我想让插入函数等我调用该commit()
函数。
在我的脚本中有 2 个命令:
插入
products
(正确的命令)插入
product_categories
(无效命令 - 我设置字段prd_idd
而不是prd_id
)
在这种情况下,我希望命令 #1 在 #2 失败时不会插入到数据库中。
public function create($params)
{
DB::beginTransaction();
try {
DB::table('products')->insert($params);
DB::table('prd_categories')->insert(['prd_idd'=> 1, 'category_id' => 1]);
} catch (\Exception $ex) {
echo $ex->getMessage();
DB::rollback();
}
die("End");
}
解决方案
要在数据库中运行一组操作transaction
,您可以使用DB
外观上的事务方法。如果事务中抛出异常Closure
,事务将自动回滚。如果Closure
成功执行,事务将自动提交。transaction
使用该方法时无需担心手动回滚或提交:
DB::transaction(function () {
DB::table('product')->insert(...);
DB::table('prd_categories')->insert(...);
});