addSql('ALTER TABLE reviews ADD album_id INT DEFAULT NULL'); $this->addSql('ALTER TABLE reviews ADD CONSTRAINT FK_6970EF78E0C31AF9 FOREIGN KEY (album_id) REFERENCES albums (id) ON DELETE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE'); $this->addSql('CREATE INDEX IDX_6970EF78E0C31AF9 ON reviews (album_id)'); // Backfill using existing spotify_album_id if both columns exist // Some environments may not have the legacy column; guard with DO blocks $this->addSql(<<<'SQL' DO $$ BEGIN IF EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name='reviews' AND column_name='spotify_album_id' ) THEN UPDATE reviews r SET album_id = a.id FROM albums a WHERE a.spotify_id = r.spotify_album_id AND r.album_id IS NULL; END IF; END $$; SQL); // Optionally set NOT NULL if all rows are linked $this->addSql(<<<'SQL' DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM reviews WHERE album_id IS NULL) THEN ALTER TABLE reviews ALTER COLUMN album_id SET NOT NULL; END IF; END $$; SQL); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE reviews DROP CONSTRAINT FK_6970EF78E0C31AF9'); $this->addSql('DROP INDEX IF EXISTS IDX_6970EF78E0C31AF9'); $this->addSql('ALTER TABLE reviews DROP COLUMN album_id'); } }