我有一个使用Query builder插入记录到数据库的函数,我想手动使用事务。
但是,在没有调用查询器的情况下,记录被插入到数据库中。commit()
函数.我不知道为什么,我想让插入函数等我,直到我调用了 commit()
函数。
在我的脚本中,有两个命令。
插入到 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(...);
});