mvanduijker/laravel-transactional-model-events
saved, created, etc., events fire before transaction completion, risking inconsistencies.TransactionalAwareEvents) aligns with Laravel’s composable architecture.afterCommit.created, afterRollback.updated, etc.), enabling precise side-effect handling (e.g., triggering webhooks only on successful commits).DB::transaction() nesting isn’t explicitly documented. May require testing.DB::rollBack() outside Laravel’s exception handling might not trigger afterRollback events.afterCommit and afterRollback paths (e.g., retries vs. cleanup).Illuminate\Database\Middleware\BeginTransaction)?afterCommit events guaranteed to fire after all model changes in the transaction, even for queued jobs or observers?DB::rollBack()) and exception-triggered rollbacks?Event facade or listeners (e.g., ModelObserver).afterCommit.created → dispatch a job).saving/saved: Fires pre-commit; risk of partial updates.saved, created) to identify transaction-critical use cases.Order, Payment) to test afterCommit/afterRollback events.DB::transaction() blocks).saved listeners with transactional equivalents where needed.saved) in favor of afterCommit.saved for consistency.illuminate/database v9+).composer require mvanduijker/laravel-transactional-model-events
Publish config if needed (check for defaults).use Mvanduijker\TransactionalModelEvents\TransactionalAwareEvents;
class Order extends Model {
use TransactionalAwareEvents;
}
// app/Listeners/OrderCommitted.php
public function handle(Events\AfterCommitCreated $event) {
// Send confirmation email only after commit
}
DB::transaction() and DB::rollBack().DB::enableQueryLog() to inspect transaction detection.afterCommit/afterRollback events for reconciliation.beginTransaction() without commit()).afterCommit → dispatch a job).afterRollback listeners may mask transaction failures.| Scenario | Impact | Mitigation Strategy |
|---|---|---|
| Transaction not committed | afterCommit events missed |
Use DB::transaction() explicitly. |
Exception in afterCommit |
Transaction rolls back | Wrap handlers in try-catch. |
| Query logging disabled | Events not detected | Ensure DB::enableQueryLog() is active. |
| Nested transactions | Event fired at wrong level | Test with DB::transaction(fn() => ...) nesting. |
| Database connection drops | Inconsistent event firing | Implement retry logic for critical events. |
afterCommit for side effects (e.g., emails, logs).afterRollback (use it for cleanup only).afterCommit/afterRollback.How can I help you explore Laravel packages today?