aeatech/transaction-manager-core
Installation
composer require aeatech/transaction-manager-core
No service provider or facade needed—use the Aeatech\TransactionManager\TransactionManager class directly.
Basic Usage
use Aeatech\TransactionManager\TransactionManager;
$manager = new TransactionManager();
$manager->run(function () {
// Your transactional logic here
DB::table('users')->insert(['name' => 'John']);
DB::table('orders')->insert(['user_id' => 1, 'amount' => 100]);
});
First Use Case Wrap a high-load operation (e.g., bulk inserts, cross-table updates) in a transaction to ensure atomicity without blocking the entire request.
Middleware for API Endpoints
public function handle(Request $request, Closure $next) {
$manager = new TransactionManager();
$manager->run(function () use ($request) {
// Process request logic
return $next($request);
});
}
Queue Job Wrapping
public function handle() {
$manager = new TransactionManager();
$manager->run(function () {
// Queue job logic (e.g., batch processing)
});
}
Database-Agnostic Transactions
$manager->run(function () {
DB::table('logs')->insert($batchData);
});
try-catch for deadlocks.
$manager->run(function () {
DB::transaction(function () {
// Risky operations
});
}, 3); // Retry 3 times on failure
Nested Transactions
savepoints if needed.Connection Handling
mysql + pgsql) will fail.Timeouts
$manager->run(function () { /* ... */ }, null, 30); // 30-second timeout
DB::enableQueryLog() to inspect failed queries.try-catch to log transaction failures:
try {
$manager->run(function () { /* ... */ });
} catch (\Exception $e) {
Log::error('Transaction failed: ' . $e->getMessage());
}
Custom Rollback Logic
Override the default rollback behavior by extending the TransactionManager class:
class CustomManager extends TransactionManager {
protected function onRollback() {
// Custom cleanup (e.g., log, notify)
}
}
Event Hooks
Listen for transaction.start/transaction.commit/transaction.rollback events (if the package supports them; check docs).
Configuration
$manager = new TransactionManager([
'retry_delay' => 100, // ms
'isolation_level' => 'serializable',
]);
How can I help you explore Laravel packages today?