diff --git a/src/Jobs/QueuedTenantDatabaseCreator.php b/src/Jobs/QueuedTenantDatabaseCreator.php index 5d026d56..bd03fc55 100644 --- a/src/Jobs/QueuedTenantDatabaseCreator.php +++ b/src/Jobs/QueuedTenantDatabaseCreator.php @@ -15,7 +15,10 @@ class QueuedTenantDatabaseCreator implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + /** @var TenantDatabaseManager */ protected $databaseManager; + + /** @var string */ protected $databaseName; /** diff --git a/src/Jobs/QueuedTenantDatabaseDeleter.php b/src/Jobs/QueuedTenantDatabaseDeleter.php index 170686cc..7d395579 100644 --- a/src/Jobs/QueuedTenantDatabaseDeleter.php +++ b/src/Jobs/QueuedTenantDatabaseDeleter.php @@ -15,7 +15,10 @@ class QueuedTenantDatabaseDeleter implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; + /** @var TenantDatabaseManager */ protected $databaseManager; + + /** @var string */ protected $databaseName; /** diff --git a/src/Jobs/QueuedTenantDatabaseMigrator.php b/src/Jobs/QueuedTenantDatabaseMigrator.php new file mode 100644 index 00000000..84acca66 --- /dev/null +++ b/src/Jobs/QueuedTenantDatabaseMigrator.php @@ -0,0 +1,38 @@ +tenant = $tenant; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle() + { + Artisan::call('tenants:migrate', [ + '--tenants' => [$this->tenant->id], + ]); + } +} diff --git a/src/TenantManager.php b/src/TenantManager.php index 9e2d9ddf..ae2dd793 100644 --- a/src/TenantManager.php +++ b/src/TenantManager.php @@ -9,6 +9,7 @@ use Illuminate\Foundation\Application; use Illuminate\Support\Collection; use Stancl\Tenancy\Contracts\TenantCannotBeCreatedException; use Stancl\Tenancy\Exceptions\TenantCouldNotBeIdentifiedException; +use Stancl\Tenancy\Jobs\QueuedTenantDatabaseMigrator; /** * @internal Class is subject to breaking changes in minor and patch versions. @@ -64,9 +65,13 @@ class TenantManager $this->database->createDatabase($tenant); if ($this->shouldMigrateAfterCreation()) { - $this->artisan->call('tenants:migrate', [ - '--tenants' => [$tenant['id']], - ]); + if ($this->shouldQueueMigration()) { + QueuedTenantDatabaseMigrator::dispatch($tenant); + } else { + $this->artisan->call('tenants:migrate', [ + '--tenants' => [$tenant['id']], + ]); + } } return $this;