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

时间:2016-08-27 06:59:10

标签: php mysql laravel transactions laravel-5.2

我正在使用Laravel 5.2。

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

  1. DB::beginTransaction()DB::transaction()
  2. DB::commitTransction()DB::commit()
  3. DB::rollbackTransction()DB::rollback()
  4. 任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:10)

DB::beginTransaction()只会开始一个事务,而对于DB::transaction(),您必须传递一个Closure函数,该函数将在事务中执行

所以这个:

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()是一个“帮助器”函数,可以避免编写代码来捕获错误,开始事务,提交事务,以及如果发生错误,还可以选择回滚(取消事务)。 p>

如果您有更复杂的逻辑或需要特定的行为,您将手动构建您的交易;如果你的逻辑很简单,DB::transaction()就是你要走的路。

对于DB::commitTransaction()DB::rollbackTransaction(),我找不到相关信息。

检查所用内容的源代码是一种很好的做法,因为您将了解它们的编写方式以及如何编写。 Here's the file以及这些方法的来源。