Créer un compte ou loggez-vous pour pouvoir ajouter, commenter et noter les snippets.

Navigation

Tags relatifs

my Symfony Plugins

Plugins demos


My bookmarks

Vous pouvez commenter/noter en utilisant le compte anonymous (mot de passe: anonymous)
You can comment/rate using the anonymous account (password: anonymous).

Snippets taggés : "constraint" Snippets taggés : "constraint"

[MySQL] Nommer index et clés étrangères pour les scripts de migration symfony - 157 view(s)

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`");
  }
}
 
par COil le 2008-09-29, taggé : constraint  index  migration  mysql  plugin  propel  symfony 
(1 commentaire)
Debug toolbar