php - 嵌套事务在 Laravel 中是如何工作的?

标签 php mysql laravel transactions

我有一个主函数 A,在函数 B 之前和函数 C 之后调用。两者都保存一个模型并在函数 A 中有自己的开始事务和主事务,数据是如何存储的?

我试图在函数 C 上抛出一个异常,但函数 B 将变量 $modelB 存储在任何地方

        public function B(){
            DB::beginTransaction();
            try{
            $modelB->save();
                DB::commit();
            }catch(\Exception $e){
                DB::rollback();
            }
        }

        public function C(){
            DB::beginTransaction();
            try{
            $modelC->save();
                DB::commit();
            }catch(\Exception $e){
                DB::rollback();
            }
        }

        public function A(){
            DB::beginTransaction();
            try{
                $this->B();
                $this->C();
                DB::commit();
            } catch(\Exception $e){
                DB::rollback();
            }
        }

最佳答案

在 Laravel 6 中,您可以使用:

DB::connection(DB::getDefaultConnection())->transactionLevel()

获取当前的事件交易号。我个人更喜欢使用单个事务,例如:
if(DB::connection(DB::getDefaultConnection())->transactionLevel()==0){
    DB::beginTransaction();
}
    try{
        //DO SOME STUFF

        if(DB::connection(DB::getDefaultConnection())->transactionLevel()==0)
        {
            DB::commit();
        }  // else, leave commit to parent transaction
    }catch(\Throwable $e)
    {
        DB::rollback();
        throw $e;
    }

关于php - 嵌套事务在 Laravel 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56022393/

相关文章:

php - 在 PHP 中除以余数

javascript - mySQL 表的 PHP 循环输出缺少一行

php - 如何将 PHP 的内存限制增加到 2GB 以上?

php - 表的列与当前 session 匹配

Laravel:更改日志路径以包含用户文件夹

deployment - Laravel:部署和供应商文件夹

javascript - 如何使用 jquery ajax 将 POST 数据发送到 PHP 函数

mysql - 如何在MySQL中选择所有以特定数字开头的列数据

php - laravel 在所有 View 中共享变量作为引用

mysql - 通过Mysql React原生json解析