From 623c8494badd3d78d6796072514c08c17651835c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Thu, 7 Feb 2019 14:18:53 +0100 Subject: [PATCH] SOLIDify database creation --- src/DatabaseCreators/MySQLDatabaseCreator.php | 13 +++++++++++++ src/DatabaseCreators/SQLiteDatabaseCreator.php | 15 +++++++++++++++ src/DatabaseManager.php | 12 ++++++------ src/Interfaces/DatabaseCreator.php | 14 ++++++++++++++ src/config/tenancy.php | 5 ++++- 5 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 src/DatabaseCreators/MySQLDatabaseCreator.php create mode 100644 src/DatabaseCreators/SQLiteDatabaseCreator.php create mode 100644 src/Interfaces/DatabaseCreator.php diff --git a/src/DatabaseCreators/MySQLDatabaseCreator.php b/src/DatabaseCreators/MySQLDatabaseCreator.php new file mode 100644 index 00000000..c3b72283 --- /dev/null +++ b/src/DatabaseCreators/MySQLDatabaseCreator.php @@ -0,0 +1,13 @@ +createTenantConnection($name); $driver = $driver ?: $this->getDriver(); - if ($driver === "sqlite") { - $f = fopen(database_path($name), 'w'); - fclose($f); - - return; + + $databaseCreators = config('tenancy.database_creators'); + + if (! array_key_exists($driver, $databaseCreators)) { + throw new \Exception("Database could not be created: no database creator for driver $driver is registered."); } - return DB::statement("CREATE DATABASE `$name` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"); + app($databaseCreators[$driver])->createDatabase($name); } public function getDriver(): ?string diff --git a/src/Interfaces/DatabaseCreator.php b/src/Interfaces/DatabaseCreator.php new file mode 100644 index 00000000..9b6fd52a --- /dev/null +++ b/src/Interfaces/DatabaseCreator.php @@ -0,0 +1,14 @@ + [ 'prefix_base' => 'tenant', ], - 'filesystem' => [ 'suffix_base' => 'tenant', // Disks which should be suffixed with the suffix_base + tenant UUID. @@ -30,4 +29,8 @@ return [ // 's3', ], ], + 'database_creators' => [ + 'sqlite' => 'Stancl\Tenancy\DatabaseCreators\SQLiteDatabaseCreator', + 'mysql' => 'Stancl\Tenancy\DatabaseCreators\MySQLDatabaseCreator', + ], ];