addSql('ALTER TABLE blogs ADD COLUMN IF NOT EXISTS review_status VARCHAR(20) DEFAULT NULL, ADD COLUMN IF NOT EXISTS reviewed_at INT DEFAULT NULL, ADD COLUMN IF NOT EXISTS review_note VARCHAR(500) DEFAULT NULL, ADD COLUMN IF NOT EXISTS topic_slug VARCHAR(255) DEFAULT NULL, ADD COLUMN IF NOT EXISTS reviewer_id INT DEFAULT NULL'); // `sources` is JSON NOT NULL: adding it directly to a table that already has // rows fails the json_valid CHECK (empty backfill is invalid JSON). // Add nullable, backfill '[]', then enforce NOT NULL. $this->addSql('ALTER TABLE blogs ADD COLUMN IF NOT EXISTS sources JSON DEFAULT NULL'); $this->addSql("UPDATE blogs SET sources = '[]' WHERE sources IS NULL"); $this->addSql('ALTER TABLE blogs MODIFY sources JSON NOT NULL'); $this->addSql('ALTER TABLE blogs DROP FOREIGN KEY IF EXISTS FK_F41BCA7070574616'); $this->addSql('ALTER TABLE blogs ADD CONSTRAINT FK_F41BCA7070574616 FOREIGN KEY (reviewer_id) REFERENCES users (id) ON DELETE SET NULL'); $this->addSql('CREATE UNIQUE INDEX IF NOT EXISTS UNIQ_F41BCA70A076FAD7 ON blogs (topic_slug)'); $this->addSql('CREATE INDEX IF NOT EXISTS IDX_F41BCA7070574616 ON blogs (reviewer_id)'); $this->addSql('CREATE INDEX IF NOT EXISTS idx_blogs_review_status ON blogs (review_status, created_at)'); } public function down(Schema $schema): void { $this->addSql('ALTER TABLE blogs DROP FOREIGN KEY FK_F41BCA7070574616'); $this->addSql('DROP INDEX UNIQ_F41BCA70A076FAD7 ON blogs'); $this->addSql('DROP INDEX IDX_F41BCA7070574616 ON blogs'); $this->addSql('DROP INDEX idx_blogs_review_status ON blogs'); $this->addSql('ALTER TABLE blogs DROP sources, DROP review_status, DROP reviewed_at, DROP review_note, DROP topic_slug, DROP reviewer_id'); } }