如何删除迁移中的主键并创建一个新的?

How to delete primary key in migration and create a new one?

我有一个 table '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']);
}

但是出现错误: drop primary key id ...Exception: SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table 定义; auto列只能有一个并且必须定义为key

如何删除旧主键并创建新主键?

该错误意味着您的主键是一个自动递增列,此类列必须是错误所说的键,因此要替换它,您需要先删除 auto_increment 行为

我还没有实际使用过 yii 迁移,但这可能有效(或者...可能无效)

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