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

Ham*_*ava 1 php mysql transactions laravel laravel-5.2

我正在使用Laravel 5.2.

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

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

任何帮助将不胜感激.

Par*_*hal 11

DB::beginTransaction()只会开始一个事务,而DB::transaction()你必须传递一个将事务中执行的Closure函数.

所以这:

DB::transaction(function() {
    // Do something and save to the db...
});
Run Code Online (Sandbox Code Playgroud)

与此相同:

// 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;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,DB::transaction()是一个"帮助器"函数,可以避免编写代码来捕获错误,开始事务,提交事务,以及在发生错误时可选地回滚(取消事务).

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

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

检查所用内容的源代码是一种很好的做法,因为您将了解它们的编写方式以及如何编写.这是包含这些方法的源文件.