Permet de pouvoir faire des scripts de migration fiables puisque les noms de clé et d'index seront les mêmes sur tout les serveurs.
<?php /** * Migration qui ajoute les colonne permettant d'effectuer la localisation * d'un membre comme les bars. */ class Migration024 extends sfMigration { /** * Up */ public function up() { $this->diag('Debut UP 24'); // Table user_profile $this->diag('MAJ champs user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` ADD `country_code` varchar(2) default NULL COMMENT 'Code du pays' AFTER `personal_url` , ADD `zone_id` int(11) default NULL COMMENT 'Departement du membre' AFTER `country_code` , ADD `lat` decimal(12,9) default NULL COMMENT 'Latitude' AFTER `zone_id` , ADD `lng` decimal(12,9) default NULL COMMENT 'Longitude' AFTER `lat` , ADD `latlng_precision` int( 11 ) default NULL COMMENT 'Precision de la localisation' AFTER `lng`; "); // ALTER TABLE `user_profile` ADD FOREIGN KEY ( `zone_id` ) REFERENCES `zone` (`id`) ON DELETE SET NULL; // Ajout des cle etrangeres $this->diag('MAJ contraintes user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` ADD CONSTRAINT `zone_id_FK` FOREIGN KEY `zone_id_idx` ( `zone_id` ) REFERENCES `zone` (`id`) ON DELETE SET NULL; "); } /** * Down */ public function down() { $this->diag('Debut DOWN 24'); // Suppr $this->diag('SUPPRESSION contraintes champs a supprimer'); $this->executeSQL(" ALTER TABLE `user_profile` DROP FOREIGN KEY `zone_id_FK` "); $this->executeSQL(" DROP INDEX `zone_id_idx` ON `user_profile` "); $this->diag('SUPPRESSION champs user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` DROP `country_code`, DROP `zone_id`, DROP `lat`, DROP `lng`, DROP `town`, DROP `latlng_precision`; "); } }
Ou en décomposant la création des index/clés
<?php /** * Migration qui ajoute les colonne permettant d'effectuer la localisation * d'un membre comme les bars. */ class Migration024 extends sfMigration { /** * Up */ public function up() { $this->diag('Debut UP 24'); // Table am_user_profile $this->diag('MAJ champs user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` ADD `country_code` varchar(2) default NULL COMMENT 'Code du pays' AFTER `personal_url` , ADD `lat` decimal(12,9) default NULL COMMENT 'Latitude' AFTER `country_code` , ADD `lng` decimal(12,9) default NULL COMMENT 'Longitude' AFTER `lat` , ADD `latlng_precision` int( 11 ) default NULL COMMENT 'Precision de la localisation' AFTER `lng`; "); // ALTER TABLE `am_user_profile` ADD FOREIGN KEY ( `zone_id` ) REFERENCES `am_zone` (`id`) ON DELETE SET NULL; // Ajout des cle etrangeres /* $this->diag('MAJ conrtaintes am_user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` ADD CONSTRAINT `zone_id_FK` FOREIGN KEY `zone_id_idx` ( `zone_id` ) REFERENCES `am_zone` (`id`) ON DELETE SET NULL; "); */ $this->diag('CREATION table am_user_zone'); $this->executeSQL(" CREATE TABLE `user_zone` ( `id` int(11) NOT NULL auto_increment, `user_id` int(11) NOT NULL, `zone_id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; "); /* KEY `user_zone_FI_1` (`user_id`), KEY `user_zone_FI_2` (`zone_id`) ALTER TABLE `user_zone` ADD INDEX ( `user_id` ) */ $this->diag('MAJ conrtaintes am_user_zone'); $this->executeSQL(" ALTER TABLE `user_zone` ADD INDEX `user_zone_FI_1` ( `user_id` ) "); $this->executeSQL(" ALTER TABLE `user_zone` ADD FOREIGN KEY `user_zone_FK_1` ( `user_id` ) REFERENCES `sf_guard_user` (`id` ) ON DELETE CASCADE; "); $this->executeSQL(" ALTER TABLE `user_zone` ADD INDEX `am_user_zone_FI_2` ( `zone_id` ) "); $this->executeSQL(" ALTER TABLE `user_zone` ADD FOREIGN KEY `user_zone_FK_2` ( `zone_id` ) REFERENCES `zone` (`id` ) ON DELETE CASCADE; "); } /** * Down */ public function down() { $this->diag('Debut DOWN 24'); // Suppr $this->diag('SUPPRESSION contraintes champs a supprimer'); /* $this->executeSQL(" ALTER TABLE `user_profile` DROP FOREIGN KEY `zone_id_FK` "); $this->executeSQL(" DROP INDEX `zone_id_idx` ON `user_profile` "); */ $this->diag('SUPPRESSION champs user_profile'); $this->executeSQL(" ALTER TABLE `user_profile` DROP `country_code`, DROP `lat`, DROP `lng`, DROP `latlng_precision`; "); $this->diag('SUPPRESSION table user_zone'); $this->executeSQL("DROP TABLE IF EXISTS `user_zone`"); } }
logs
8042.1 KB