我尝试只使用up和down方法编写此迁移,但我得到此错误。
SQLSTATE[HY000]:一般错误:1553无法删除索引'transaction_id':外键约束中需要
<?php
use \Test\Migrations\Migration;
class ModifyTableChargeback extends Migration
{
public function up()
{
$table = $this->table('mod_chargeback');
$table->addColumn('client_id', 'integer', ['after' => 'id'])
->addIndex('client_id')
->addColumn('invoice_id', 'integer', ['after' => 'client_id'])
->addIndex('invoice_id')
->addColumn('transaction_id', 'integer', ['after' => 'invoice_id'])
->addColumn('date_paid', 'datetime', ['null' => true, 'after' => 'result'])
->addColumn('date', 'date', ['null' => true, 'after' => 'date_paid'])
->addColumn('reason', 'string', ['null' => true, 'after' => 'date'])
->addColumn('issuer_message', 'string', ['null' => true, 'after' => 'reason'])
->addForeignKey('transaction_id', 'mod_transactions', 'id'
->update();
}
public function down()
{
$this->table('mod_chargeback')
->removeIndex('client_id')
->removeIndex('invoice_id')
->removeColumn('client_id')
->removeColumn('invoice_id')
->removeColumn('transaction_id')
->removeColumn('date_paid')
->removeColumn('date')
->removeColumn('reason')
->removeColumn('issuer_message')
->dropForeignKey('transaction_id')
->update();
}
}
我尝试在$options参数中添加约束,但没有成功up方法正在工作,但在drop中它没有删除外键,我尝试重新排序drop orders,但也没有成功。
1条答案
按热度按时间c7rzv4ha1#
MySQL需要索引外键约束的列,如果没有索引,将创建一个索引。删除列将删除索引,因此出现错误消息。
如果你不知道隐式索引,这条消息可能会有点误导。这在MySQL 8中似乎有所改变,它会提到列:
无法删除列“transaction_id”:在外键约束中需要...
结论,在删除列之前删除外键。