2013-12-20 4 views
3

Я создал миграцию с помощью migrate create и поставить следующие коды на нем:Yii - Ошибка при добавлении внешних ключей с помощью миграции

<?php 

class m131220_121449_create_all_tables extends CDbMigration 
{ 
    // Use safeUp/safeDown to do migration with transaction 
    public function safeUp() { 
     // MEMBERS TABLE 
     $this->createTable("members", array(
      'uniq_id' => 'pk', 
      'personel_num' => 'int(10) NOT NULL', 
      'password' => 'string NOT NULL', 
      'name' => 'string DEFAULT NULL', 
      'lastupdate' => 'timestamp DEFAULT CURRENT_TIMESTAMP', 
     ), 'ENGINE=InnoDB'); 

     // RESERVED TABLE 
     $this->createTable("reserved", array(
       'uniq_id' => 'pk', 
       'personel_num' => 'int(10) NOT NULL', 
       'RsvdDay' => 'date NOT NULL', 
       'date_created' => 'timestamp DEFAULT CURRENT_TIMESTAMP', 
     ), 'ENGINE=InnoDB'); 

     // Add Foreign Keys Relations for RESERVED 
     $this->addForeignKey("fk_rsvd_user", "reserved", "personel_num", "members", "personel_num", "CASCADE", "RESTRICT"); 
     } 

} 

Но когда я хочу, чтобы на этой миграции я получил General Error # 1005, когда он пытается для создания внешних ключей.

Вот образ ошибки: Error Image


Ответ был найден:

ссылка внешнего ключа должен быть в другом столе Первичный ключ ,

ответ

5
$this->createTable("members", array(
     'uniq_id' => 'pk', 
     'personel_num' => 'int(10) NOT NULL', 
     'password' => 'string NOT NULL', 
     'name' => 'string DEFAULT NULL', 
     'lastupdate' => 'timestamp DEFAULT CURRENT_TIMESTAMP', 
     'UNIQUE KEY `personel_num` (`personel_num`)', 
    ), 'ENGINE=InnoDB'); 

Сделать персонализированным уникальным, чтобы сделать его иностранным ключом. Вы также можете просто удалить uniq_id и сделать personel_num a pk.

Смежные вопросы