From 3afb6b7eb41384c51eff4b200162a6436914a528 Mon Sep 17 00:00:00 2001 From: Saeed Vaziry Date: Sat, 23 Mar 2024 17:39:51 +0100 Subject: [PATCH] sqlite to mysql migrate command --- .../Commands/MigrateFromMysqlToSqlite.php | 73 +++++++++++++++++++ config/database.php | 2 +- ...28_085814_create_source_controls_table.php | 4 +- 3 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 app/Console/Commands/MigrateFromMysqlToSqlite.php diff --git a/app/Console/Commands/MigrateFromMysqlToSqlite.php b/app/Console/Commands/MigrateFromMysqlToSqlite.php new file mode 100644 index 0000000..335368e --- /dev/null +++ b/app/Console/Commands/MigrateFromMysqlToSqlite.php @@ -0,0 +1,73 @@ +info('Migrating from Mysql to SQLite...'); + + File::exists(storage_path('database.sqlite')) + ? File::delete(storage_path('database.sqlite')) + : null; + + File::put(storage_path('database.sqlite'), ''); + + config(['database.default' => 'sqlite']); + + $this->call('migrate', ['--force' => true]); + + $this->migrateModel(\App\Models\Backup::class); + $this->migrateModel(\App\Models\BackupFile::class); + $this->migrateModel(\App\Models\CronJob::class); + $this->migrateModel(\App\Models\Database::class); + $this->migrateModel(\App\Models\DatabaseUser::class); + $this->migrateModel(\App\Models\Deployment::class); + $this->migrateModel(\App\Models\DeploymentScript::class); + $this->migrateModel(\App\Models\FirewallRule::class); + $this->migrateModel(\App\Models\GitHook::class); + $this->migrateModel(\App\Models\NotificationChannel::class); + $this->migrateModel(\App\Models\Project::class); + $this->migrateModel(\App\Models\Queue::class); + $this->migrateModel(\App\Models\Server::class); + $this->migrateModel(\App\Models\ServerLog::class); + $this->migrateModel(\App\Models\ServerProvider::class); + $this->migrateModel(\App\Models\Service::class); + $this->migrateModel(\App\Models\Site::class); + $this->migrateModel(\App\Models\SourceControl::class); + $this->migrateModel(\App\Models\SshKey::class); + $this->migrateModel(\App\Models\Ssl::class); + $this->migrateModel(\App\Models\StorageProvider::class); + $this->migrateModel(\App\Models\User::class); + + $env = File::get(base_path('.env')); + $env = str_replace('DB_CONNECTION=mysql', 'DB_CONNECTION=sqlite', $env); + File::put(base_path('.env'), $env); + + $this->info('Migrated from Mysql to SQLite'); + } + + private function migrateModel(string $model): void + { + $this->info("Migrating model: {$model}"); + + config(['database.default' => 'mysql']); + + $rows = $model::where('id', '>', 0)->get(); + + foreach ($rows as $row) { + DB::connection('sqlite')->table($row->getTable())->insert($row->getAttributes()); + } + + $this->info("Migrated model: {$model}"); + } +} diff --git a/config/database.php b/config/database.php index 03641e9..2fbe0cc 100644 --- a/config/database.php +++ b/config/database.php @@ -37,7 +37,7 @@ 'sqlite' => [ 'driver' => 'sqlite', - 'database' => storage_path(env('DB_DATABASE', 'database.sqlite')), + 'database' => storage_path('database.sqlite'), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), ], diff --git a/database/migrations/2021_06_28_085814_create_source_controls_table.php b/database/migrations/2021_06_28_085814_create_source_controls_table.php index b0404ed..086675b 100755 --- a/database/migrations/2021_06_28_085814_create_source_controls_table.php +++ b/database/migrations/2021_06_28_085814_create_source_controls_table.php @@ -11,8 +11,8 @@ public function up(): void Schema::create('source_controls', function (Blueprint $table) { $table->id(); $table->string('provider'); - $table->json('provider_data')->nullable()->after('provider'); - $table->longText('access_token')->nullable(); // @TODO: remove this column + $table->json('provider_data')->nullable(); + $table->longText('access_token')->nullable(); $table->timestamps(); }); }