2016-08-27 37 views
0

私はLaravel 5.2を使用しています。どれが認識されるであろうことができますDB :: beginTransaction()とDB :: transaction()の違いは何ですか?

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

私は間の違いが何であるかを知っていただきたいと思います。

+0

DB :: commitTransaction()とDB :: rollbackTransaction()は存在しません。 – Doom5

+0

@ Doom5しかし、私はそれを見ましたhttps://laracasts.com/discuss/channels/eloquent/do-you-use-database-transactions-for-your-eloquent-queries –

答えて

9

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()については、情報が見つかりません。

使用方法のソースコードを確認することをお勧めします。これは、作成方法と書き方を学ぶためです。 Here's the fileにこれらのメソッドのソースを指定します。

+0

ありがとうございます。しかし、私は 'DB :: commitTransaction0'を見ました。https://laracasts.com/discuss/channels/eloquent/do-you-use-database-transactions-for-your-eloquent-queries –

+0

@Hamed間違いだったかもしれません。 – Doom5

+0

@ Doom5たぶん;-) –

関連する問題