league/tactician-doctrine
Integrates the Tactician command bus with Doctrine via middleware that wraps command handlers in database transactions. It manages EntityManager/DBAL connections, helping keep command execution atomic and simplifying transactional command handling in PHP applications.
laravel-doctrine/orm; for Eloquent-native Laravel it is largely inapplicable and should not enter the roadmap as a Laravel dependency.Consider it when:
Look elsewhere when:
DB::transaction or job middleware instead.doctrine_transaction) with active maintenance.For executives: This is a small piece of plumbing that makes multi-step write operations all-or-nothing by default, which reduces a category of data-integrity bugs in checkout, billing, and inventory flows. Cost is low and the license is permissive (MIT). The caveat is stewardship: the project is effectively dormant — 58 stars, no downstream dependents, no release since early 2022. We should not adopt it as a supported third-party dependency; if we want the behavior, we vendor or reimplement it internally so we own the risk. The decision is really "do we standardize a transactional command layer," and this package is a reference implementation for that decision, not a strategic bet.
For engineering: The package provides Tactician middleware — primarily a transaction middleware — that wraps command handler execution in a Doctrine transaction and commits or rolls back based on outcome. It is a handful of classes with no framework magic and no Laravel coupling; it assumes Tactician plus Doctrine ORM. Given the dormancy and the tiny surface area, my recommendation is to treat it as a specification: port the transaction middleware into our own codebase behind our command bus, cover it with tests, and avoid the dependency. If we are already on Tactician and Doctrine and want speed over ownership, pinning and forking is acceptable — but budget for the fork, because upstream fixes are not coming. If we are on Eloquent or Symfony Messenger, close this out; the equivalent capability already exists natively.
How can I help you explore Laravel packages today?