我有现有的表pricing
,在迁移脚本中我想添加两个新列pricing_set_id
和coe_id
,它们都是外键.
在 up
函数上,它运行完美,没有任何错误,但是当我运行 down
函数时,它出现了错误。我的代码如下。
在 up
函数上:
$pricingTable = $schema->getTable('pricing');
$pricingSetTable = $schema->getTable('pricing_set');
if (!$pricingTable->hasColumn('pricing_set_id')) {
$pricingTable->addColumn('pricing_set_id', 'uuid')->setNotnull(false);
}
if (!$pricingTable->hasIndex('FK_pricing_set_idx')) {
$pricingTable->addIndex(['pricing_set_id'], 'FK_pricing_set_idx');
}
if (!$pricingTable->hasForeignKey('FK_pricing_set')) {
$pricingTable->addForeignKeyConstraint($pricingSetTable,
['pricing_set_id'],
['id'],
['onUpdate' => 'CASCADE', 'onDelete' => 'CASCADE'],
'FK_pricing_set');
}
if (!$pricingTable->hasColumn('coe_id')) {
$pricingTable->addColumn('coe_id', 'uuid')->setNotnull(false);
}
if (!$pricingTable->hasIndex('FK_pricing_coe_idx')) {
$pricingTable->addIndex(['coe_id'], 'FK_pricing_coe_idx');
}
if (!$pricingTable->hasForeignKey('FK_pricing_coe')) {
$pricingTable->addForeignKeyConstraint($schema->getTable('user'),
['coe_id'],
['id'],
['onUpdate' => 'CASCADE','onDelete' => 'CASCADE'],
'FK_pricing_coe');
}
在 down
函数上:
$pricingTable = $schema->getTable('pricing');
if ($pricingTable->hasForeignKey('FK_pricing_set')) {
$pricingTable->removeForeignKey('FK_pricing_set');
}
if ($pricingTable->hasColumn('pricing_set_id')) {
$pricingTable->dropColumn('pricing_set_id');
}
if ($pricingTable->hasIndex('FK_pricing_set_idx')) {
$pricingTable->dropIndex('FK_pricing_set_idx');
}
if ($pricingTable->hasForeignKey('FK_pricing_coe')) {
$pricingTable->removeForeignKey('FK_pricing_coe');
}
if ($pricingTable->hasColumn('coe_id')) {
$pricingTable->dropColumn('coe_id');
}
if ($pricingTable->hasIndex('FK_pricing_coe_idx')) {
$pricingTable->dropIndex('FK_pricing_coe_idx');
}
我得到的错误:
-> ALTER TABLE pricing DROP FOREIGN KEY FK_pricing_set
-> DROP INDEX FK_pricing_set_idx ON pricing
-> DROP INDEX FK_pricing_coe_idx ON pricing
Migration 20141031071812 failed during Execution. Error An exception occurred while executing 'DROP INDEX FK_pricing_coe_idx ON pricing': SQLSTATE[HY000]: General error: 1553 Cannot drop index 'FK_pricing_coe_idx': needed in a foreign key constraint.
我注意到 Doctrine 生成的 SQL 顺序与 Doctrine 代码中预期的顺序不完全相同。它删除索引 FK_pricing_coe_idx
而不删除其外键。这可能是它出错的原因。
有什么办法可以解决这个问题吗?
最佳答案
错误发生是因为当索引被删除时 FK_pricing_coe 外键仍然存在。
关于php - Doctrine 迁移 : adding and removing two foreign key columns to existing table is not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27518347/