mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 09:54:05 +00:00
[2.1.0] Allow automatic seeding after automatic migrations
Fixes #158 If config('tenancy.seeder_class') is null or a blank string, the seeder-class parameter is not passed, and therefore Laravel's default option of calling 'DatabaseSeeder' will occur. As with Laravel's normal seeding process, the class is treated as the "root" seeder class, which can call other seeder classes in turn.
This commit is contained in:
parent
58fbdd5281
commit
7e2eed88da
3 changed files with 69 additions and 0 deletions
|
|
@ -91,6 +91,8 @@ return [
|
||||||
'home_url' => '/app',
|
'home_url' => '/app',
|
||||||
'queue_database_creation' => false,
|
'queue_database_creation' => false,
|
||||||
'migrate_after_creation' => false, // run migrations after creating a tenant
|
'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,
|
'queue_database_deletion' => false,
|
||||||
'delete_database_after_tenant_deletion' => false, // delete the tenant's database after deleting the tenant
|
'delete_database_after_tenant_deletion' => false, // delete the tenant's database after deleting the tenant
|
||||||
'unique_id_generator' => Stancl\Tenancy\UniqueIDGenerators\UUIDGenerator::class,
|
'unique_id_generator' => Stancl\Tenancy\UniqueIDGenerators\UUIDGenerator::class,
|
||||||
|
|
|
||||||
42
src/Jobs/QueuedTenantDatabaseSeeder.php
Normal file
42
src/Jobs/QueuedTenantDatabaseSeeder.php
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Stancl\Tenancy\Jobs;
|
||||||
|
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
use Illuminate\Support\Facades\Artisan;
|
||||||
|
use Stancl\Tenancy\Tenant;
|
||||||
|
|
||||||
|
class QueuedTenantDatabaseSeeder implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
protected $tenantId;
|
||||||
|
|
||||||
|
/** @var array */
|
||||||
|
protected $seederClassParameter = [];
|
||||||
|
|
||||||
|
public function __construct(Tenant $tenant, $seederClassName = '')
|
||||||
|
{
|
||||||
|
$this->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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
$this->database->createDatabase($tenant, $afterCreating);
|
||||||
|
|
@ -321,6 +336,11 @@ class TenantManager
|
||||||
return $this->app['config']['tenancy.migrate_after_creation'] ?? false;
|
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
|
public function databaseCreationQueued(): bool
|
||||||
{
|
{
|
||||||
return $this->app['config']['tenancy.queue_database_creation'] ?? false;
|
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;
|
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.
|
* Add an event listener.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue