cakephp 使用Phinx写入删除外键

30byixjq  于 2023-04-12  发布在  PHP
关注(0)|答案(1)|浏览(163)

我尝试只使用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,但也没有成功。

c7rzv4ha

c7rzv4ha1#

MySQL需要索引外键约束的列,如果没有索引,将创建一个索引。删除列将删除索引,因此出现错误消息。
如果你不知道隐式索引,这条消息可能会有点误导。这在MySQL 8中似乎有所改变,它会提到列:
无法删除列“transaction_id”:在外键约束中需要...
结论,在删除列之前删除外键。

相关问题