Ouzo\Db::runInTransaction PHP Method

runInTransaction() public method

public runInTransaction ( $callable )
    public function runInTransaction($callable)
    {
        if (!$this->_startedTransaction) {
            $this->beginTransaction();
            try {
                $result = call_user_func($callable);
                $this->commitTransaction();
                return $result;
            } catch (Exception $e) {
                $this->rollbackTransaction();
                throw $e;
            }
        }
        return call_user_func($callable);
    }

Usage Example

Example #1
0
 /**
  * @test
  */
 public function runInTransactionShouldInvokeBeginAndCommitOnSuccess()
 {
     // given
     Db::getInstance()->enableTransactions();
     $dbHandle = Mock::mock();
     $db = new Db(false);
     $db->_dbHandle = $dbHandle;
     //when
     $result = $db->runInTransaction(array(new Sample(), 'callMethod'));
     //then
     $this->assertEquals('OK', $result);
     Mock::verify($dbHandle)->beginTransaction();
     Mock::verify($dbHandle)->commit();
     Mock::verify($dbHandle)->neverReceived()->rollbackTransaction();
 }