Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between DB::beginTransaction() and DB::transaction()?

I'm using Laravel 5.2.

I would like to know what are the differences between :

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

Any helps would be appreciated.

like image 402
Hamed Kamrava Avatar asked Aug 27 '16 06:08

Hamed Kamrava


1 Answers

DB::beginTransaction() will only begin a transaction, while for DB::transaction() you must pass a Closure function that will be executed inside a transaction.

So this:

DB::transaction(function() {
    // Do something and save to the db...
});

is the same as this:

// 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;
}

As you can see, DB::transaction() is a "helper" function to avoid writing code to catch errors, begin a transaction, commit the transaction, and optionally rollback (cancel the transaction) if an error occured.

If you have a more complex logic, or need an specific behaviour, you will manually build your transaction; if your logic is rather simple, DB::transaction() is the way to go.

As for DB::commitTransaction() and DB::rollbackTransaction(), I can't find information.

It's a good practice to check the source code of the things you use, because you will learn how they are written, as well as how to write. Here's the file with the source for these methods.

like image 142
Parziphal Avatar answered Sep 22 '22 09:09

Parziphal