From fed8c0f9d11c26c03c66809e815b4b04e6b257f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Wed, 11 Dec 2019 22:16:25 +0100 Subject: [PATCH] [2.2.4] [WIP] Respect custom connections when creating database (#244) * Add TenantDatabaseManager::setConnection() * Apply fixes from StyleCI --- src/Contracts/Future/CanSetConnection.php | 15 +++++++++++++++ src/DatabaseManager.php | 11 +++++++++-- .../MySQLDatabaseManager.php | 11 +++++++++-- .../PostgreSQLDatabaseManager.php | 8 +++++++- 4 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 src/Contracts/Future/CanSetConnection.php diff --git a/src/Contracts/Future/CanSetConnection.php b/src/Contracts/Future/CanSetConnection.php new file mode 100644 index 00000000..4fde6cb4 --- /dev/null +++ b/src/Contracts/Future/CanSetConnection.php @@ -0,0 +1,15 @@ +getDriver($this->getBaseConnection($tenant->getConnectionName())); + $driver = $this->getDriver($this->getBaseConnection($connectionName = $tenant->getConnectionName())); $databaseManagers = $this->app['config']['tenancy.database_managers']; @@ -234,6 +235,12 @@ class DatabaseManager throw new DatabaseManagerNotRegisteredException($driver); } - return $this->app[$databaseManagers[$driver]]; + $databaseManager = $this->app[$databaseManagers[$driver]]; + + if ($connectionName !== 'tenant' && $databaseManager instanceof CanSetConnection) { + $databaseManager->setConnection($this->database->connection($connectionName)); + } + + return $databaseManager; } } diff --git a/src/TenantDatabaseManagers/MySQLDatabaseManager.php b/src/TenantDatabaseManagers/MySQLDatabaseManager.php index 548f628d..9ed211bc 100644 --- a/src/TenantDatabaseManagers/MySQLDatabaseManager.php +++ b/src/TenantDatabaseManagers/MySQLDatabaseManager.php @@ -5,12 +5,14 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenantDatabaseManagers; use Illuminate\Contracts\Config\Repository; +use Illuminate\Database\Connection; use Illuminate\Database\DatabaseManager as IlluminateDatabaseManager; +use Stancl\Tenancy\Contracts\Future\CanSetConnection; use Stancl\Tenancy\Contracts\TenantDatabaseManager; -class MySQLDatabaseManager implements TenantDatabaseManager +class MySQLDatabaseManager implements TenantDatabaseManager, CanSetConnection { - /** @var \Illuminate\Database\Connection */ + /** @var Connection */ protected $database; public function __construct(Repository $config, IlluminateDatabaseManager $databaseManager) @@ -18,6 +20,11 @@ class MySQLDatabaseManager implements TenantDatabaseManager $this->database = $databaseManager->connection($config['tenancy.database_manager_connections.mysql']); } + public function setConnection(Connection $connection) + { + $this->database = $connection; + } + public function createDatabase(string $name): bool { $charset = $this->database->getConfig('charset'); diff --git a/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php b/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php index 9fe67297..688b357e 100644 --- a/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php +++ b/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php @@ -5,12 +5,13 @@ declare(strict_types=1); namespace Stancl\Tenancy\TenantDatabaseManagers; use Illuminate\Contracts\Config\Repository; +use Illuminate\Database\Connection; use Illuminate\Database\DatabaseManager as IlluminateDatabaseManager; use Stancl\Tenancy\Contracts\TenantDatabaseManager; class PostgreSQLDatabaseManager implements TenantDatabaseManager { - /** @var \Illuminate\Database\Connection */ + /** @var Connection */ protected $database; public function __construct(Repository $config, IlluminateDatabaseManager $databaseManager) @@ -18,6 +19,11 @@ class PostgreSQLDatabaseManager implements TenantDatabaseManager $this->database = $databaseManager->connection($config['tenancy.database_manager_connections.pgsql']); } + public function setConnection(Connection $connection) + { + $this->database = $connection; + } + public function createDatabase(string $name): bool { return $this->database->statement("CREATE DATABASE \"$name\" WITH TEMPLATE=template0");