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 с источником для этих методов.
'DB :: commitTransaction()' и 'DB :: rollbackTransaction()' не существует. – Doom5
@ Doom5 Но я видел, что здесь https://laracasts.com/discuss/channels/eloquent/do-you-use-database-transactions-for-your-eloquent-queries –