stefano / stefano-nested-transaction
Nested Transaction Manager
Installs: 6 284
Dependents: 1
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/stefano/stefano-nested-transaction
Requires
- php: >=7.1.0
 
Requires (Dev)
- mockery/mockery: ^1.0.0
 - php-coveralls/php-coveralls: ^2.0
 - phpunit/phpunit: >=7 <10
 
This package is auto-updated.
Last update: 2025-10-29 01:39:31 UTC
README
Instalation using Composer
- Run command  
composer require stefano/stefano-nested-transaction 
Features
- manages nested transaction
 
Usage
- Configuration
 
//$transactionAdapter implements \StefanoNestedTransaction\Adapter\TransactionInterface
$transactionAdapter = new YourTransactionAdapter();
$transactionManager = new \StefanoNestedTransaction\TransactionManager($transactionAdapter);
- Example: normal flow
 
$transactionManager->begin(); //REAL start transaction
try {
    // ...
    //nested transaction block, that might be in some other code
    $transactionManager->begin(); //increase internal transaction counter
    try {
        // ...
        $transactionManager->commit(); //decrease internal transaction counter
    } catch(\Exception $e) {
        $transactionManager->rollback(); //skipped
        throw $e->getPrevious();
    }
    // ...
    $transactionManager->commit(); //REAL commit transaction;
} catch(\Exception $e) {
    $transactionManager->rollback(); //skipped
    throw $e->getPrevious();
}
- Example: throw exception
 
$transactionManager->begin(); //REAL start transaction
try {
    // ...
    //nested transaction block, that might be in some other code
    $transactionManager->begin(); //increase internal transaction counter
    try {
        // ...
        throw new \Exception();
        $transactionManager->commit(); //skipped
    } catch(\Exception $e) {
        $transactionManager->rollback(); //marked as rollback only
        throw $e->getPrevious();
    }
    // ...
    $transactionManager->commit(); //skipped
} catch(\Exception $e) {
    $transactionManager->rollback(); //REAL rollback
    throw $e->getPrevious();
}
- Example: throw exception
 
$transactionManager->begin(); //REAL start transaction
try {
    // ...
    //nested transaction block, that might be in some other code
    $transactionManager->begin(); //increase internal transaction counter
    try {
        // ...
        throw new \Exception();
        $transactionManager->commit(); //do nothing
    } catch(\Exception $e) {
        $transactionManager->rollback(); //marked as rollback only
    }
    // ...
    $transactionManager->commit(); //this throw exception because transaction is marked as rollback only
} catch(\Exception $e) {
    $transactionManager->rollback(); //REAL rollback
    throw $e->getPrevious();
}