saelker/migrations-bundle
A Symfony bundle that integrates Doctrine Migrations, providing console commands and configuration to generate, run, and track database schema changes so environments stay in sync from the CLI.
Architecture fit. This is the first and most important finding: saelker/migrations-bundle is a Symfony bundle, not a Laravel package. Laravel does not have a bundle system — bundles are a Symfony kernel/DI-container concept. Even though Laravel is built on several Symfony components, it cannot load or register a Symfony bundle through its service provider model. So for a Laravel codebase, the architecture fit is effectively zero out of the box. The package's stated purpose — orchestrating migrations across multiple Symfony bundles — also does not map onto Laravel's migration model, which is a single flat database/migrations directory driven by artisan migrate, with no first-class concept of per-package migration namespaces or cross-bundle ordering.
Integration feasibility. Three paths exist, and all are unattractive:
loadMigrationsFrom, doctrine/dbal for schema introspection, or lorisleiva/laravel-deployer-style orchestration) already covers 80–90% of the plausible use case.Technical risk. High. Concretely:
Bundle base class, compiler passes). A bundle last released in Aug 2023 will not track Symfony 7.x and certainly has no Laravel 10/11 story.Key questions.
loadMigrationsFrom() plus explicit filename prefixes likely suffices.Stack fit. Poor for a pure Laravel estate. The package targets Symfony's bundle/kernel lifecycle and Doctrine migrations. Laravel's migration subsystem (Illuminate\Database\Migrations\Migrator) is a different implementation with different discovery, repository (migrations table), and batching semantics. There is no adapter layer and none is planned upstream. Doctrine migrations can be used inside Laravel via community bridges, but this bundle is not one of them.
Migration path (if pursued). Treat this as a design reference, not a dependency:
loadMigrationsFrom() with deterministic prefixes.Compatibility. Assume no support for Laravel 9/10/11 and no verified support for Symfony 6.3+/7.x. Validate PHP constraint declarations against the runtime (8.1/8.2/8.3) and Doctrine migrations major version before any spike. Expect the composer solver to fail or require --ignore-platform-reqs, which is itself a red flag.
Sequencing.
The recommendation is to sequence as "evaluate and almost certainly reject," with the native fallback pre-scoped so the decision does not block the team.
Maintenance. Highest concern. A 2-star, 0-dependent package with a single maintainer and a last release in August 2023 is not a maintained dependency by any reasonable definition. Every Symfony major bump, PHP minor bump, and Doctrine migrations release becomes our problem. Ownership of a fork means owning the release process, security review, and downstream compatibility testing — a recurring cost far larger than writing the ~200 lines of Laravel-native orchestration it would replace.
Support. No vendor, no SLA, no community. Incident response would be entirely internal. For a component sitting on the deploy path, this is the wrong risk profile.
Scaling. Migrations are a serial, once-per-deploy operation; raw throughput is a non-issue. The scaling concern is organizational: as the number of packages/modules grows, an opaque third-party orchestrator makes it harder to reason about ordering, rollback safety, and partial-failure recovery. A naming-convention approach scales linearly and transparently; a black-box bundle does not.
Failure modes.
Ramp-up. Minimal cost to understand the concept (small codebase), but meaningful cost to operate safely: engineers must learn the bundle's discovery rules and its interaction with Doctrine's migration table, and that knowledge has no external documentation or community to fall back on. For a Laravel team, the ramp-up is essentially "learn a Symfony subsystem none of us use" — a poor return.
Bottom line. Do not integrate. The package is architecturally mismatched to Laravel, operationally unmaintained, and addresses a problem Laravel already solves with loadMigrationsFrom() and disciplined migration naming. Capture the design intent, build the native equivalent, and revisit only if a concrete Symfony requirement emerges with a funded owner for the fork.
How can I help you explore Laravel packages today?