phpmysqllaravellaravel-5eloquent

Lavavel/Eloquent 5 transactions rolling back not backing save


I do seem to be having problems getting database transactions to work on a model. I've referred to related posts on SO, but no luck yet.

In my example, I create a new record in the DB. I should be able to rollback and the new record should have disappeared shouldn't it?

        try{
            DB::beginTransaction();

            $oNewMap = $oMap->replicate();
            $oNewMap->name = "[test] " . $oNewMap->name;
            $oNewMap->save();  // works

            DB::rollBack();  / /record still in db
        }
        catch(\Exception $e){       
            DB::rollBack();
            /* Transaction failed. */
        }

When the rollback occured, why wouldn't the saved record disappear from the DB? Am I missing something with how models work with transactions?

The physical tables are all InnoDB, btw.

[EDITTED: to simplify the problem to a simple save and rollback, not doing two saves where the second save violates an FK constraint.]


Solution

  • If the model doesn't use the default database connection, you have to specify it on the transaction:

    DB::connection('name')->beginTransaction();
    DB::connection('name')->commit();
    DB::connection('name')->rollBack();