diff --git a/assets/config.php b/assets/config.php index a6b84e68..e3af7291 100644 --- a/assets/config.php +++ b/assets/config.php @@ -91,6 +91,8 @@ return [ 'home_url' => '/app', 'queue_database_creation' => false, 'migrate_after_creation' => false, // run migrations after creating a tenant + 'seed_after_migration' => false, // should the seeder run after automatic migration + 'seeder_class' => 'DatabaseSeeder', // root seeder class to run after automatic migrations, eg: 'DatabaseSeeder' 'queue_database_deletion' => false, 'delete_database_after_tenant_deletion' => false, // delete the tenant's database after deleting the tenant 'unique_id_generator' => Stancl\Tenancy\UniqueIDGenerators\UUIDGenerator::class, diff --git a/src/Jobs/QueuedTenantDatabaseSeeder.php b/src/Jobs/QueuedTenantDatabaseSeeder.php new file mode 100644 index 00000000..609c9b71 --- /dev/null +++ b/src/Jobs/QueuedTenantDatabaseSeeder.php @@ -0,0 +1,42 @@ +tenantId = $tenant->id; + $this->seederClassParameter = ! empty($seederClassName) ? ['--class' => $seederClassName] : []; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Artisan::call('tenants:seed', [ + '--tenants' => [$this->tenantId], + ] + $this->seederClassParameter); + } +} diff --git a/src/TenantManager.php b/src/TenantManager.php index 16030245..3b31e92a 100644 --- a/src/TenantManager.php +++ b/src/TenantManager.php @@ -76,6 +76,21 @@ class TenantManager ]); }, ]; + + if ($this->shouldSeedAfterMigration()) { + $seederClassName = $this->getSeederRootClass(); + $seederClassParameter = ! empty($seederClassName) ? ['--class' => $seederClassName] : []; + + $afterCreating += $this->databaseCreationQueued() ? [ + new QueuedTenantDatabaseSeeder($tenant, $seederClassName), + ] : [ + function () use ($tenant, $seederClassParameter) { + $this->artisan->call('tenants:seed', [ + '--tenants' => [$tenant['id']], + ] + $seederClassParameter); + }, + ]; + } } $this->database->createDatabase($tenant, $afterCreating); @@ -321,6 +336,11 @@ class TenantManager return $this->app['config']['tenancy.migrate_after_creation'] ?? false; } + public function shouldSeedAfterMigration(): bool + { + return $this->shouldMigrateAfterCreation() && $this->app['config']['tenancy.seed_after_migration'] ?? false; + } + public function databaseCreationQueued(): bool { return $this->app['config']['tenancy.queue_database_creation'] ?? false; @@ -331,6 +351,11 @@ class TenantManager return $this->app['config']['tenancy.delete_database_after_tenant_deletion'] ?? false; } + public function getSeederRootClass() + { + return $this->app['config']['tenancy.seeder_class'] ?? null; + } + /** * Add an event listener. *