diff --git a/src/Commands/MigrateFresh.php b/src/Commands/MigrateFresh.php new file mode 100644 index 00000000..6a31e888 --- /dev/null +++ b/src/Commands/MigrateFresh.php @@ -0,0 +1,62 @@ +setName('tenants:migrate-fresh'); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $originalTenant = tenancy()->getTenant(); + $this->info('Dropping tables.'); + + tenancy()->all($this->option('tenants'))->each(function ($tenant) { + $this->line("Tenant: {$tenant->id}"); + + tenancy()->initialize($tenant); + + $this->call('db:wipe', array_filter([ + '--database' => $tenant->getConnectionName(), + '--force' => true, + ])); + + $this->call('tenants:migrate', [ + '--tenants' => [$tenant->id], + ]); + + tenancy()->end(); + }); + + $this->info('Done.'); + + if ($originalTenant) { + tenancy()->initialize($originalTenant); + } + } +} diff --git a/src/TenancyServiceProvider.php b/src/TenancyServiceProvider.php index c70c5418..0e847c4b 100644 --- a/src/TenancyServiceProvider.php +++ b/src/TenancyServiceProvider.php @@ -65,6 +65,7 @@ class TenancyServiceProvider extends ServiceProvider Commands\Migrate::class, Commands\Rollback::class, Commands\TenantList::class, + Commands\MigrateFresh::class, ]); $this->publishes([ diff --git a/tests/CommandsTest.php b/tests/CommandsTest.php index d7ffb3cd..1fdf9801 100644 --- a/tests/CommandsTest.php +++ b/tests/CommandsTest.php @@ -138,4 +138,22 @@ class CommandsTest extends TestCase $this->assertDirectoryExists(database_path('migrations/tenant')); $this->assertSame(file_get_contents(__DIR__ . '/Etc/modifiedHttpKernel.stub'), file_get_contents(app_path('Http/Kernel.php'))); } + + /** @test */ + public function migrate_fresh_command_works() + { + $this->assertFalse(Schema::hasTable('users')); + Artisan::call('tenants:migrate-fresh'); + $this->assertFalse(Schema::hasTable('users')); + tenancy()->init('test.localhost'); + $this->assertTrue(Schema::hasTable('users')); + + $this->assertFalse(DB::table('users')->exists()); + DB::table('users')->insert(['name' => 'xxx', 'password' => bcrypt('password'), 'email' => 'foo@bar.xxx']); + $this->assertTrue(DB::table('users')->exists()); + + // test that db is wiped + Artisan::call('tenants:migrate-fresh'); + $this->assertFalse(DB::table('users')->exists()); + } }