yii 如何在迁移中删除主键并新建主键?

yftpprvb  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(142)

我有一个表'forms',它有一个主键- 'id'。这个主键是通过迁移创建的:

$this->createTable('forms', [
        'id' => $this->primaryKey(),
        'group_id' => $this->integer(11),
        'form_id'  => $this->integer(11)
]);

现在我需要删除这个主键'id',并从'form_id'和'group_id'创建一个新的复合主键。
我在新迁移中尝试过类似的方法:

public function safeUp()
{
    $this->dropPrimaryKey('id', 'forms');
    $this->addPrimaryKey('pk_forms', 'forms', ['form_id', 'group_id']);
}

但是错误发生了:删除主键ID...异常错误:数据库状态[42000]:语法错误或访问冲突:1075不正确的表定义;只能有一个自动列,并且必须将其定义为键
如何删除旧主键并创建新主键?

ttisahbt

ttisahbt1#

该错误意味着主键是一个自动递增列,此类列必须是错误所述的键,因此要替换它,您需要首先删除auto_increment行为
我还没有真正使用过Yii迁移,但这可能会工作(或者...它可能不会)

$this->alterColumn('forms', 'id', 'integer');
$this->dropPrimaryKey('id', 'forms');
$this->addPrimaryKey('pk_forms', 'forms', ['form_id', 'group_id']);

相关问题