php - Doctrine 迁移 : adding and removing two foreign key columns to existing table is not working

标签 php mysql doctrine-orm doctrine

我有现有的表pricing,在迁移脚本中我想添加两个新列pricing_set_idcoe_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/

相关文章:

symfony - 如何为现有的 Symfony+Doctrine 应用程序生成初始/基础迁移?

php - 无法使简单的 if/else 语句起作用

php - PHP如何管理并发请求

php - 用于从字符串中提取所有 url 的正则表达式

MySQL - 如何从字符串中接收子字符串表

php - ORDER BY 但通过在 Codeigniter 的 Order By 中添加减号来使零/空值最后

php - 关于删除级联主义

php - Laravel - 根据 Laravel 中相似的 id 对记录进行分组

mysql - 搜索多个字段mysql的最快方法

php - 主义,删除集合?