diff --git a/src/Contracts/Future/CanSetConnection.php b/src/Contracts/Future/CanSetConnection.php new file mode 100644 index 000000000..4fde6cb4d --- /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 @@ public function getTenantDatabaseManager(Tenant $tenant): TenantDatabaseManager 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 548f628df..9ed211bca 100644 --- a/src/TenantDatabaseManagers/MySQLDatabaseManager.php +++ b/src/TenantDatabaseManagers/MySQLDatabaseManager.php @@ -5,12 +5,14 @@ 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 @@ public function __construct(Repository $config, IlluminateDatabaseManager $datab $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 9fe672973..688b357e2 100644 --- a/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php +++ b/src/TenantDatabaseManagers/PostgreSQLDatabaseManager.php @@ -5,12 +5,13 @@ 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 @@ public function __construct(Repository $config, IlluminateDatabaseManager $datab $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");