corytech/doctrine-migrations-multiple-database-bundle
DoctrineMigrationsBundle) lacks native support for multi-entity-manager migrations. This aligns with architectures requiring:
default for core data, geonames for geospatial extensions).laravel-doctrine).php artisan doctrine:migrations:execute --em=geonames).doctrine/doctrine-migrations-bundle).config/app.php under providers (Symfony’s bundles.php equivalent).doctrine_migrations_multiple_database.yaml into Laravel’s config (e.g., config/doctrine.php).php artisan doctrine:migrations:diff --em=geonames).Connection::beginTransaction() per EM).geonames EM points to a deprecated DB).doctrine: prefix may clash with Laravel’s commands.schema_filter in config/doctrine.php).Main/ and Geonames/ directories).default and geonames tables)?php artisan migrate) coexist with Doctrine migrations, or will Doctrine be the sole source of truth?Schema::connection())?| Component | Compatibility | Workaround |
|---|---|---|
| Doctrine DBAL | ✅ Native | Use doctrine/dbal package |
| Doctrine ORM | ⚠️ Via laravel-doctrine |
Requires additional setup |
| Eloquent | ❌ Incompatible | Migrate to Doctrine ORM |
| Symfony Console | ⚠️ Partial | Alias commands in app/Console/Kernel.php |
| Artisan | ✅ With overrides | Bind Symfony commands to Artisan |
Phase 1: Prep Work (1–2 weeks)
doctrine/doctrine-migrations-bundle and avaibooksports/doctrine-migrations-multiple-database-bundle.doctrine/dbal or doctrine/orm is installed.config/doctrine.php (e.g., default, geonames).'entity_managers' => [
'default' => ['connection' => 'default'],
'geonames' => ['connection' => 'geonames'],
],
'connections' => [
'geonames' => ['url' => 'mysql://user:pass@localhost/geonames_db'],
],
migrations/Main/ and migrations/Geonames/ directories.php artisan doctrine:migrations:generate --em=default --name="Initial default schema"
php artisan doctrine:migrations:generate --em=geonames --name="Initial geonames schema"
Phase 2: Bundle Integration (1 week)
config/app.php:
'providers' => [
// ...
AvaiBookSports\Bundle\MigrationsMutlipleDatabase\DoctrineMigrationsMultipleDatabaseBundle::class,
],
config/packages/doctrine_migrations_multiple_database.yaml:
doctrine_migrations_multiple_database:
entity_managers:
default:
migrations_paths:
DoctrineMigrations\Main: '%kernel.project_dir%/migrations/Main'
geonames:
migrations_paths:
DoctrineMigrations\Geonames: '%kernel.project_dir%/migrations/Geonames'
app/Console/Kernel.php, bind Symfony commands to Artisan:
protected $commands = [
// ...
\Doctrine\Migrations\Tools\Console\Command\MigrateCommand::class,
\Doctrine\Migrations\Tools\Console\Command\DiffCommand::class,
// Add custom aliases for multi-EM support
];
Phase 3: Validation (1–2 weeks)
php artisan doctrine:migrations:migrate --em=default
php artisan doctrine:migrations:migrate --em=geonames
php artisan doctrine:migrations:rollback --em=geonames --to=20230101000000
Phase 4: CI/CD Integration (1 week)
- name: Run Doctrine Migrations
run: |
php artisan doctrine:migrations:migrate --em
How can I help you explore Laravel packages today?