添加外键时表迁移问题

时间:2015-02-12 08:49:20

标签: mysql sql yii2

我的一个文件包含以下主表:

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 个答案:

答案 0 :(得分:1)

为了创建外键:

1)两列应具有相同的类型。

您有不同的类型(字符串整数):

'uid' => 'VARCHAR(150) NOT NULL',

'uid' => 'integer NOT NULL',

2)在外键引用连接列的表中应该有索引。

在你的代码中,这也是缺失的。

在迁移中,您可以使用createIndex()方法创建索引。