pccomponentes / mongodb-transaction
MongoDB Transaction
Requires
- php: ^7.4
- ext-mongodb: *
- mongodb/mongodb: ^1.4
- pccomponentes/transaction: ^1.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-10-23 22:46:38 UTC
README
The problem
The way to use transactions in MongoDB differs from a typical relational database connection (MySQL, PostgreSQL, etc).
In MongoDB a session is generated and all operations must be associated to that session.
That means that for any write anywhere in the code you would have to send the session associated with the transaction to MongoDB.
The solution
It has been extended the Client, Collection and Database classes. Can generate a session and pass it to each class to control transactions from the beginning.
Usage
Instead of instantiating the original \MongoDB\Client
, instantiate the PcComponentes\Transaction\Driver\MongoDB\Client
class.
<?php $client = new PcComponentes\Transaction\Driver\MongoDB\Client($uri); try { $client->beginTransaction(); //... $client->commit(); } catch (\Throwable $exception) { $client->rollBack(); }
Or you can use Transaction Middleware:
<?php $middleware = new PcComponentes\Transaction\SymfonyMessenger\TransactionMiddleware( new PcComponentes\Transaction\Driver\MongoDB\MongoDBTransactionalConnection( new PcComponentes\Transaction\Driver\MongoDB\Client($uri) ) );