如何删除迁移中的主键并创建一个新的?
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']);
我有一个 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']);