Skip to content

Commit 5a6ac71

Browse files
authored
Merge pull request #590 from tobias-93/fix-multiple-connections
Add support for multiple connections managed by migrations
2 parents 56f684f + dc4f5b5 commit 5a6ac71

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

config/services.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@
148148

149149
<service id="doctrine_migrations.schema_filter_listener" class="Doctrine\Bundle\MigrationsBundle\EventListener\SchemaFilterListener">
150150
<tag name="kernel.event_listener" event="console.command" method="onConsoleCommand" />
151-
<tag name="doctrine.dbal.schema_filter" />
151+
<!-- <tag name="doctrine.dbal.schema_filter" /> This tag is dynamically added for each connection -->
152152
</service>
153153

154154
</services>

src/DependencyInjection/DoctrineMigrationsExtension.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,15 @@ public function load(array $configs, ContainerBuilder $container): void
124124
}
125125

126126
$configurationDefinition->addMethodCall('setMetadataStorageConfiguration', [new Reference('doctrine.migrations.storage.table_storage')]);
127+
128+
// Add tag to the filter for each Doctrine connection, so the table is ignored for multiple connections
129+
if ($container->hasParameter('doctrine.connections')) {
130+
/** @var array<string, string> $connections */
131+
$connections = $container->getParameter('doctrine.connections');
132+
foreach (array_keys($connections) as $connection) {
133+
$filterDefinition->addTag('doctrine.dbal.schema_filter', ['connection' => $connection]);
134+
}
135+
}
127136
}
128137

129138
if ($config['em'] !== null && $config['connection'] !== null) {

tests/DependencyInjection/DoctrineMigrationsExtensionTest.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -279,6 +279,10 @@ public function testCustomConnection(): void
279279
$di = $container->get('doctrine.migrations.dependency_factory');
280280
self::assertInstanceOf(DependencyFactory::class, $di);
281281
self::assertSame($doctrine->getConnection('custom'), $di->getConnection());
282+
// Check if the multiple connections also added the required tags to the filter
283+
$filterDefinition = $container->findDefinition('doctrine_migrations.schema_filter_listener');
284+
$tags = $filterDefinition->getTag('doctrine.dbal.schema_filter');
285+
self::assertCount(2, $tags);
282286
}
283287

284288
public function testPrefersEntityManagerOverConnection(): void
@@ -466,9 +470,6 @@ private function getContainer(array $config, ?array $dbalConfig = null, ?array $
466470
$bundle = new DoctrineMigrationsBundle();
467471
$bundle->build($container);
468472

469-
$extension = new DoctrineMigrationsExtension();
470-
$extension->load(['doctrine_migrations' => $config], $container);
471-
472473
$extension = new DoctrineExtension();
473474

474475
$doctrineBundleConfigs = $dbalConfig === null ? ['dbal' => ['url' => 'sqlite:///:memory:']] : ['dbal' => $dbalConfig];
@@ -478,8 +479,15 @@ private function getContainer(array $config, ?array $dbalConfig = null, ?array $
478479

479480
$extension->load(['doctrine' => $doctrineBundleConfigs], $container);
480481

482+
$extension = new DoctrineMigrationsExtension();
483+
$extension->load(['doctrine_migrations' => $config], $container);
484+
481485
$container->getDefinition('doctrine.migrations.dependency_factory')->setPublic(true);
482486
$container->getDefinition('doctrine.migrations.configuration')->setPublic(true);
487+
if ($container->hasDefinition('doctrine_migrations.schema_filter_listener')) {
488+
$container->getDefinition('doctrine_migrations.schema_filter_listener')->setPublic(true);
489+
}
490+
483491
$container->addCompilerPass(new CacheCompatibilityPass());
484492

485493
return $container;

0 commit comments

Comments
 (0)