2016-08-27 4 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() вы должны передать функцию 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() функция «помощник», чтобы избежать написания кода, чтобы поймать ошибки, начать транзакцию , совершить транзакцию и, при необходимости, откат (отменить транзакцию), если произошла ошибка.

Если у вас более сложная логика или требуется конкретное поведение, вы вручную создадите транзакцию; если ваша логика довольно проста, 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 Might была ошибкой. – Doom5

+0

@ Doom5 Может быть ;-) –

Смежные вопросы