From cb2a061ed2d2cc93658f9cf5500aec97a75b3b31 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Samuel=20=C5=A0tancl?= <samuel.stancl@gmail.com>
Date: Wed, 11 Dec 2019 19:06:51 +0100
Subject: [PATCH 1/2] Add TenantDatabaseManager::setConnection()

---
 src/Contracts/Future/CanSetConnection.php           | 13 +++++++++++++
 src/DatabaseManager.php                             | 11 +++++++++--
 src/TenantDatabaseManagers/MySQLDatabaseManager.php | 11 +++++++++--
 .../PostgreSQLDatabaseManager.php                   |  8 +++++++-
 4 files changed, 38 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 000000000..46eed8538
--- /dev/null
+++ b/src/Contracts/Future/CanSetConnection.php
@@ -0,0 +1,13 @@
+<?php
+
+namespace Stancl\Tenancy\Contracts\Future;
+
+use Illuminate\Database\Connection;
+
+/**
+ * This interface *might* be part of the TenantDatabaseManager interface in 3.x.
+ */
+interface CanSetConnection
+{
+    public function setConnection(Connection $connection);
+}
\ No newline at end of file
diff --git a/src/DatabaseManager.php b/src/DatabaseManager.php
index 151a9455a..7d653d867 100644
--- a/src/DatabaseManager.php
+++ b/src/DatabaseManager.php
@@ -8,6 +8,7 @@
 use Illuminate\Contracts\Queue\ShouldQueue;
 use Illuminate\Database\DatabaseManager as BaseDatabaseManager;
 use Illuminate\Foundation\Application;
+use Stancl\Tenancy\Contracts\Future\CanSetConnection;
 use Stancl\Tenancy\Contracts\TenantDatabaseManager;
 use Stancl\Tenancy\Exceptions\DatabaseManagerNotRegisteredException;
 use Stancl\Tenancy\Exceptions\TenantDatabaseAlreadyExistsException;
@@ -226,7 +227,7 @@ public function deleteDatabase(Tenant $tenant)
      */
     public function getTenantDatabaseManager(Tenant $tenant): TenantDatabaseManager
     {
-        $driver = $this->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");

From f58591a4fde819480b5586e92e17d50cff450414 Mon Sep 17 00:00:00 2001
From: stancl <samuel.stancl@gmail.com>
Date: Wed, 11 Dec 2019 18:07:31 +0000
Subject: [PATCH 2/2] Apply fixes from StyleCI

---
 src/Contracts/Future/CanSetConnection.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/Contracts/Future/CanSetConnection.php b/src/Contracts/Future/CanSetConnection.php
index 46eed8538..4fde6cb4d 100644
--- a/src/Contracts/Future/CanSetConnection.php
+++ b/src/Contracts/Future/CanSetConnection.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Stancl\Tenancy\Contracts\Future;
 
 use Illuminate\Database\Connection;
@@ -10,4 +12,4 @@
 interface CanSetConnection
 {
     public function setConnection(Connection $connection);
-}
\ No newline at end of file
+}