Laravel 7.x DB事务自动提交没有commit()命令.

问题描述 投票:0回答:1

我有一个使用Query builder插入记录到数据库的函数,我想手动使用事务。

但是,在没有调用查询器的情况下,记录被插入到数据库中。commit() 函数.我不知道为什么,我想让插入函数等我,直到我调用了 commit() 函数。

在我的脚本中,有两个命令。

  1. 插入到 products (正确命令)

  2. 插入 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");
}
laravel transactions commit rollback autocommit
1个回答
0
投票

在数据库中运行一组操作 transaction您可以使用交易方法在 DB 门面。如果一个异常在事务中被抛出 Closure,交易将自动回滚。如果 Closure 成功执行,交易将自动提交。你不需要担心手动回滚或提交,而使用了 transaction 方法。

DB::transaction(function () {
    DB::table('product')->insert(...);
    DB::table('prd_categories')->insert(...);
});
© www.soinside.com 2019 - 2024. All rights reserved.