我的一个文件包含以下主表:
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
)
我花了一个多小时但却无法弄清楚这个错误。
答案 0 :(得分:1)
为了创建外键:
1)两列应具有相同的类型。
您有不同的类型(字符串和整数):
'uid' => 'VARCHAR(150) NOT NULL',
和
'uid' => 'integer NOT NULL',
2)在外键引用连接列的表中应该有索引。
在你的代码中,这也是缺失的。
在迁移中,您可以使用createIndex()方法创建索引。