我的一个文件包含以下主表:
public function up()
{
$this->createTable('{{%users}}', [
'id' => 'pk',
'uid'=> 'VARCHAR(150) NOT NULL',
'mydate' => Schema::TYPE_INTEGER . ' NOT NULL',
'state' => "ENUM('INA','ACT') " . ' NOT NULL',
'setting' => Schema::TYPE_INTEGER . ' NOT NULL',
],'ENGINE=InnoDB'
);
}
引用上表uid
的子表是:
$this->createTable('{{%xyztable}}', [
'id'=>'pk',
'uid' => 'integer NOT NULL',
'server_time' => Schema::TYPE_INTEGER . ' NOT NULL',
'answer' => 'VARCHAR(135) NOT NULL',
],'ENGINE=InnoDB'
);
$this->addForeignKey('fk_unique_id',"{{%xyztable}}", 'uid', '{{%users}}', 'uid', 'CASCADE', 'CASCADE');
在调用迁移时,我收到以下错误
Error Info:
Array
(
[0] => HY000
[1] => 1215
[2] => Cannot add foreign key constraint
)
我花了一个多小时但无法找出这个错误。
最佳答案
为了创建外键:
1) 两列应具有相同的类型。
您有不同的类型(字符串和整数):
'uid' => 'VARCHAR(150) NOT NULL',
和
'uid' => 'integer NOT NULL',
2)表中引用连接列的外键应该有索引。
在您的代码中,这也缺失。
在迁移中,您可以使用 createIndex() 创建索引方法。
关于mysql - 添加外键时表迁移问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28472995/