【问题标题】:What is the difference between DB::beginTransaction() and DB::transaction()?DB::beginTransaction() 和 DB::transaction() 有什么区别?
【发布时间】:2017-01-03 20:09:57
【问题描述】:

我正在使用 Laravel 5.2。

我想知道有什么区别:

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

任何帮助将不胜感激。

【问题讨论】:

标签: php mysql laravel transactions laravel-5.2


【解决方案1】:

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:: commitTransaction();
} 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(),我找不到信息。

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

【讨论】:

  • 谢谢。但是我在这里看到DB::commitTransaction0 laracasts.com/discuss/channels/eloquent/…
  • @Hamed 可能是个错误。
  • @HamedKamrava DB::commitTransaction() **
  • 我认为现在DB::commitTransaction() 已重命名为DB::commit()
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2013-03-27
  • 1970-01-01
  • 2011-05-28
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
相关资源
最近更新 更多