isSqlite()) { // SQLite schema never created the legacy columns. return; } // Guard: drop columns only if they exist $this->addSql(<<<'SQL' DO $$ BEGIN IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='reviews' AND column_name='spotify_album_id') THEN ALTER TABLE reviews DROP COLUMN spotify_album_id; END IF; IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='reviews' AND column_name='album_name') THEN ALTER TABLE reviews DROP COLUMN album_name; END IF; IF EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name='reviews' AND column_name='album_artist') THEN ALTER TABLE reviews DROP COLUMN album_artist; END IF; END $$; SQL); } public function down(Schema $schema): void { if ($this->isSqlite()) { return; } // Recreate columns as nullable in down migration $this->addSql('ALTER TABLE reviews ADD spotify_album_id VARCHAR(64) DEFAULT NULL'); $this->addSql('ALTER TABLE reviews ADD album_name VARCHAR(255) DEFAULT NULL'); $this->addSql('ALTER TABLE reviews ADD album_artist VARCHAR(255) DEFAULT NULL'); } private function isSqlite(): bool { return $this->connection->getDatabasePlatform()->getName() === 'sqlite'; } }