tito10047 / doctrine-transaction
Library to manage doctrine transaction
0.1.1
2024-09-23 07:59 UTC
Requires
- php: >=8.1
- ext-curl: *
Requires (Dev)
- doctrine/orm: ^3.2
- doctrine/persistence: ^3.3
- phpunit/phpunit: ^9.5
README
Doctrine Transaction
When you use Repository classes in your application, and don't use EntityManager directly, you can't use the transaction methods on Repository classes. This package allows you to use transactions anywhere in your application.
This package is also useful when you need to use multiple connections in the same transaction.
Setup
composer require tito10047/doctrine-transaction
Try it
#service.yaml services: Tito10047\DoctrineTransaction\TransactionManagerInterface: class: Tito10047\DoctrineTransaction\TransactionManager
use Tito10047\DoctrineTransaction\TransactionManager; class MyService { public function __construct(private readonly TransactionManagerInterface $tm) { } public function myMethod() { $transaction = $this->tm->beginTransaction(); try { // Your code $transaction->commit(); } catch (\Exception $e) { $transaction->rollback(); throw $e; } } public function myBatchMethod() { $transaction = $this->tm->beginTransaction(); try { for($i = 0; $i < 100; $i++) { $myEntity = new MyEntity(); if ($transaction->batchCommit($i,10)){ $transaction->clear(MyEntity::class); } } $transaction->commit(); } catch (\Exception $e) { $transaction->rollback(); throw $e; } } public function myCallbacksMethod() { $transaction = $this->tm ->beginTransaction() ->addCommitHandler(function() { // Your code }) ->addRollbackHandler(function() { // Your code }); try { for($i = 0; $i < 100; $i++) { $myEntity = new MyEntity(); if ($transaction->batchCommit($i,10)){ $transaction->clear(MyEntity::class); } } $transaction->commit(); } catch (\Exception $e) { $transaction->rollback(); throw $e; } } public function multipleConnections() { $transaction = $this->tm->beginTransaction('connection1','connection2'); try { // Your code $transaction->commit(); } catch (\Exception $e) { $transaction->rollback(); throw $e; } } }