addSql(<<<'SQL' CREATE TABLE country ( id INT GENERATED BY DEFAULT AS IDENTITY NOT NULL, code VARCHAR(2) NOT NULL, name VARCHAR(80) NOT NULL, position INT DEFAULT 0 NOT NULL, PRIMARY KEY (id) ) SQL); $this->addSql('CREATE UNIQUE INDEX uq_country_code ON country (code)'); $this->comment('country', '_table', 'Referentiel des pays selectionnables dans les adresses (clients/fournisseurs). Perimetre minimal : code ISO + libelle + ordre (pas de longueurs bancaires/fiscales).'); $this->comment('country', 'id', 'Identifiant interne auto-incremente.'); $this->comment('country', 'code', 'Code pays ISO 3166-1 alpha-2 (2 lettres MAJUSCULES, ex: FR) — unique (uq_country_code), fige a la creation.'); $this->comment('country', 'name', 'Libelle FR du pays (≤ 80 caracteres) — valeur stockee telle quelle dans les adresses (country en chaine libre a ce stade).'); $this->comment('country', 'position', 'Ordre d affichage croissant dans le selecteur pays (tri position ASC puis name ASC ; France en tete).'); // Seed initial. France en tete (position 10) puis ordre alphabetique. // Table fraichement creee, mais ON CONFLICT pour rejouabilite en prod. $this->addSql(<<<'SQL' INSERT INTO country (code, name, position) VALUES ('FR', 'France', 10), ('DE', 'Allemagne', 20), ('BE', 'Belgique', 30), ('ES', 'Espagne', 40), ('IT', 'Italie', 50), ('GB', 'Royaume-Uni', 60), ('CH', 'Suisse', 70) ON CONFLICT (code) DO NOTHING SQL); } public function down(Schema $schema): void { $this->addSql('DROP TABLE country'); } /** * Pose un `COMMENT ON TABLE` (colonne speciale `_table`) ou * `COMMENT ON COLUMN`. Quoting defensif des identifiants + delimiteur $_$ * pour ne pas casser sur les apostrophes des 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, )); } }