From bc27a93edaaa065417696d6727abde869699461c Mon Sep 17 00:00:00 2001 From: Abrar Ahmad Date: Thu, 5 Jan 2023 14:23:46 +0500 Subject: [PATCH] partial database config for template --- src/Database/DatabaseConfig.php | 11 ++++++++--- tests/TenantDatabaseManagerTest.php | 25 +++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) 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],