cuo*_*gle 7 php mysql doctrine doctrine-orm
我有现有的表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');
}
Run Code Online (Sandbox Code Playgroud)
在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');
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
-> 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
Run Code Online (Sandbox Code Playgroud)
迁移20141031071812在执行期间失败.错误执行'DROP INDEX FK_pricing_coe_idx ON定价'时发生异常:SQLSTATE [HY000]:常规错误:1553无法删除索引'FK_pricing_coe_idx':在外键约束中需要.
我注意到Doctrine生成的SQL的顺序与Doctrine代码上的预期不完全相同.它删除索引FK_pricing_coe_idx而不删除其外键.这可能是它出错的原因.
有没有办法解决这个问题?
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |