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

时间:2019-08-30 12:04:46

标签: php yii migration

我有一个表格“ 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 ...异常:SQLSTATE [42000]:语法错误或访问冲突:1075错误的表定义;只能有一个自动列,并且必须将其定义为键

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

1 个答案:

答案 0 :(得分:1)

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

我实际上没有使用过yii迁移,但这可能行得通(或者……可能行不通)

from sqlalchemy import event
from sqlalchemy.engine import Engine
from sqlite3 import Connection as SQLite3Connection

@event.listens_for(Engine, "connect")
def _set_sqlite_pragma(dbapi_connection, connection_record):
    if isinstance(dbapi_connection, SQLite3Connection):
        cursor = dbapi_connection.cursor()
        cursor.execute("PRAGMA foreign_keys=ON;")
        cursor.close()