addSql('DROP TABLE IF EXISTS provider_address_category'); } public function down(Schema $schema): void { $this->addSql(<<<'SQL' CREATE TABLE provider_address_category ( provider_address_id INT NOT NULL, category_id INT NOT NULL, PRIMARY KEY (provider_address_id, category_id), CONSTRAINT fk_provider_address_category_address FOREIGN KEY (provider_address_id) REFERENCES provider_address (id) ON DELETE CASCADE, CONSTRAINT fk_provider_address_category_category FOREIGN KEY (category_id) REFERENCES category (id) ON DELETE RESTRICT ) SQL); $this->comment('provider_address_category', '_table', 'Jointure M2M provider_address <-> category — categories d adresse de type PRESTATAIRE (RG-3.09).'); $this->comment('provider_address_category', 'provider_address_id', 'FK -> provider_address.id, ON DELETE CASCADE — adresse concernee.'); $this->comment('provider_address_category', 'category_id', 'FK -> category.id, ON DELETE RESTRICT — categorie d adresse de type PRESTATAIRE (RG-3.09).'); } /** * Pose un COMMENT ON TABLE/COLUMN en dollar-quoting Postgres ($_$...$_$) * pour eviter tout echappement d'apostrophes dans les descriptions. */ private function comment(string $table, string $column, string $description): void { $quotedTable = '"'.str_replace('"', '""', $table).'"'; if ('_table' === $column) { $this->addSql(sprintf('COMMENT ON TABLE %s IS $_$%s$_$', $quotedTable, $description)); return; } $this->addSql(sprintf( 'COMMENT ON COLUMN %s.%s IS $_$%s$_$', $quotedTable, '"'.str_replace('"', '""', $column).'"', $description, )); } }