使用php的数据库迁移库phinx,如何建立混合主键?

在 Phinx 中建立混合主键(复合主键)可以通过以下步骤实现:

方法一:在创建表时通过选项指定

public function change()
{
    $table = $this->table('your_table', [
        'id' => false, // 禁用自动生成的 id 主键
        'primary_key' => ['column1', 'column2'] // 指定复合主键
    ]);

    $table->addColumn('column1', 'integer', ['null' => false])
          ->addColumn('column2', 'string', ['null' => false, 'limit' => 50])
          ->addColumn('other_column', 'text')
          ->create();
}

方法二:使用 addPrimaryKey 方法

public function change()
{
    $table = $this->table('your_table', ['id' => false]);

    $table->addColumn('column1', 'integer', ['null' => false])
          ->addColumn('column2', 'string', ['null' => false, 'limit' => 50])
          ->addColumn('other_column', 'text')
          ->addPrimaryKey(['column1', 'column2']) // 添加复合主键
          ->create();
}

关键点:

  1. 禁用默认主键:通过 'id' => false 关闭 Phinx 的自动主键生成。
  2. 设置非空约束:主键列必须设置 'null' => false
  3. 指定主键列:使用 primary_key 选项或 addPrimaryKey 方法定义复合主键。

验证生成的 SQL:

执行迁移后,检查表结构是否包含类似以下语句:

PRIMARY KEY (`column1`, `column2`)

修改现有表(高级用法):

若需为已有表添加复合主键,需先删除原有主键:

public function change()
{
    $table = $this->table('existing_table');
    $table->dropPrimaryKey(); // 删除原有主键
    $table->addPrimaryKey(['column1', 'column2'])
          ->update();
}

使用上述方法,即可在 Phinx 中成功创建复合主键。

Was this helpful?

0 / 0

发表回复 0