diff --git a/src/Database/DatabaseConfig.php b/src/Database/DatabaseConfig.php index bc735000..52cb464c 100644 --- a/src/Database/DatabaseConfig.php +++ b/src/Database/DatabaseConfig.php @@ -109,12 +109,17 @@ class DatabaseConfig } if ($template = config('tenancy.database.template_tenant_connection')) { - return is_array($template) ? $template : config("database.connections.{$template}"); + return is_array($template) ? array_merge($this->getCentralConnection(), $template) : config("database.connections.{$template}"); } - $template = config('tenancy.database.central_connection'); + return $this->getCentralConnection(); + } - return config("database.connections.{$template}"); + protected function getCentralConnection(): array + { + $centralConnectionName = config('tenancy.database.central_connection'); + + return config("database.connections.{$centralConnectionName}"); } public function getTenantHostConnectionName(): string diff --git a/tests/TenantDatabaseManagerTest.php b/tests/TenantDatabaseManagerTest.php index 0cfebe94..cc254aca 100644 --- a/tests/TenantDatabaseManagerTest.php +++ b/tests/TenantDatabaseManagerTest.php @@ -440,6 +440,31 @@ test('template tenant connection value can be connection name or connection arra expect($manager->database()->getConfig('host'))->toBe('mysql2'); }); +test('template tenant connection value can be partial database config', function () { + Event::listen(TenantCreated::class, JobPipeline::make([CreateDatabase::class])->send(function (TenantCreated $event) { + return $event->tenant; + })->toListener()); + + config([ + 'database.connections.central.url' => 'example.com', + 'tenancy.database.template_tenant_connection' => [ + 'url' => null, + 'host' => 'mysql2', + ], + ]); + + $name = 'foo' . Str::random(8); + $tenant = Tenant::create([ + 'tenancy_db_name' => $name, + ]); + + /** @var MySQLDatabaseManager $manager */ + $manager = $tenant->database()->manager(); + expect($manager->databaseExists($name))->toBeTrue(); + expect($manager->database()->getConfig('host'))->toBe('mysql2'); + expect($manager->database()->getConfig('url'))->toBeNull(); +}); + // Datasets dataset('database_managers', [ ['mysql', MySQLDatabaseManager::class],