繁体   English   中英

DB::beginTransaction() 和 DB::transaction() 有什么区别?

[英]What is the difference between DB::beginTransaction() and DB::transaction()?

我正在使用 Laravel 5.2。

我想知道两者之间有什么区别:

  1. DB::beginTransaction()DB::transaction()
  2. DB::commitTransction()DB::commit()
  3. DB::rollbackTransction()DB::rollback()

任何帮助将不胜感激。

DB::beginTransaction()只会开始一个事务,而对于DB::transaction()你必须传递一个将在事务内部执行的闭包函数。

所以这:

DB::transaction(function() {
    // Do something and save to the db...
});

与此相同:

// Open a try/catch block
try {
    // Begin a transaction
    DB::beginTransaction();

    // Do something and save to the db...

    // Commit the transaction
    DB::commit();
} catch (\Exception $e) {
    // An error occured; cancel the transaction...
    DB::rollback();
    
    // and throw the error again.
    throw $e;
}

如您所见, DB::transaction()是一个“帮助器”函数,用于避免编写代码来捕获错误、开始事务、提交事务以及在发生错误时可选择回滚(取消事务)。

如果您有更复杂的逻辑,或者需要特定的行为,您将手动构建您的事务; 如果您的逻辑相当简单,那么DB::transaction()就是要走的路。

至于DB::commitTransaction()DB::rollbackTransaction() ,我找不到信息。

检查您使用的东西的源代码是一个很好的做法,因为您将了解它们是如何编写的,以及如何编写。 这是这些方法的源文件

从 Laravel 6 开始使用 Transactions 必须使用以下辅助函数。

use Illuminate\Support\Facades\DB;

try {
    // For Begin a transaction
    DB::beginTransaction();

    // Do something

    // Commit the transaction
    DB:: commit();
} catch (\Throwable $e) {
    // An error occured
    DB::rollback();
    
    // and throw the error again.
    throw $e;
}

如果您使用 DB::commitTransaction(); 函数,得到错误未定义的函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM