微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Yii – 使用migrate添加外键时出错

我使用migrate create创建了一个迁移,并在其上添加了以下代码

<?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");
        }

}

但是,当我想要进行此迁移时,我在尝试创建外键时遇到了常规错误#1005.

这是错误的图像:

答案被发现:

外键的引用必须是其他表中的主键.

解决方法:

$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');

使personel_num唯一,使其成为外键.您也可以删除uniq_id并将personel_num设为pk.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐