addSql(<<<'SQL' CREATE TABLE user_site ( user_id INT NOT NULL, site_id INT NOT NULL, PRIMARY KEY (user_id, site_id) ) SQL); $this->addSql('CREATE INDEX IDX_user_site_user ON user_site (user_id)'); $this->addSql('CREATE INDEX IDX_user_site_site ON user_site (site_id)'); $this->addSql(<<<'SQL' ALTER TABLE user_site ADD CONSTRAINT FK_user_site_user FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE SQL); $this->addSql(<<<'SQL' ALTER TABLE user_site ADD CONSTRAINT FK_user_site_site FOREIGN KEY (site_id) REFERENCES site (id) ON DELETE CASCADE SQL); // 2) Ajout de la colonne nullable user.current_site_id + FK SET NULL. $this->addSql('ALTER TABLE "user" ADD current_site_id INT DEFAULT NULL'); $this->addSql('CREATE INDEX IDX_user_current_site ON "user" (current_site_id)'); $this->addSql(<<<'SQL' ALTER TABLE "user" ADD CONSTRAINT FK_user_current_site FOREIGN KEY (current_site_id) REFERENCES site (id) ON DELETE SET NULL SQL); } public function down(Schema $schema): void { // Rollback en ordre inverse : enfants avant parents. $this->addSql('ALTER TABLE "user" DROP CONSTRAINT FK_user_current_site'); $this->addSql('DROP INDEX IDX_user_current_site'); $this->addSql('ALTER TABLE "user" DROP current_site_id'); $this->addSql('ALTER TABLE user_site DROP CONSTRAINT FK_user_site_site'); $this->addSql('ALTER TABLE user_site DROP CONSTRAINT FK_user_site_user'); $this->addSql('DROP TABLE user_site'); } }