在 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();
}
关键点:
- 禁用默认主键:通过
'id' => false
关闭 Phinx 的自动主键生成。 - 设置非空约束:主键列必须设置
'null' => false
。 - 指定主键列:使用
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