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', + ], ];