外键不匹配 - “password_resets”在 dropColumn 上引用“users”

Posted

技术标签:

【中文标题】外键不匹配 - “password_resets”在 dropColumn 上引用“users”【英文标题】:Foreign key mismatch - "password_resets" referencing "users" on dropColumn 【发布时间】:2020-08-14 15:43:09 【问题描述】:

我正在尝试通过迁移在“用户”表上删除一列(我们称之为 fooboo),但我遇到了下一个错误:

一般错误:1 个外键不匹配 - “password_resets”引用“users”(SQL:INSERT INTO users (id, name, email, password, fooboo, created_at, updated_at) SELECT id, name, email, password, fooboo, created_at, updated_at FROM __temp__users)

迁移类中的up()函数:


    public function up()
    
        Schema::table('users', function (Blueprint $table) 
            $table->dropColumn('fooboo');
        );
    

此列尤其没有任何索引、FK 或任何可能造成冲突的东西。它只是一个布尔值,默认值为FALSE

我在运行我的单元测试 (phpunit) 时遇到了这个错误。我无法仅删除创建它的迁移类上的列来解决此问题,我需要一个新的迁移才能在生产服务器上运行。

询问我们的朋友 google,我只能找到与错过迁移相关的此错误,这不是我的情况。

【问题讨论】:

【参考方案1】:

你可以先添加这一行:

Schema::disableForeignKeyConstraints();

并在最后添加这一行:

Schema::enableForeignKeyConstraints();

这将禁用您的外键约束。

【讨论】:

好吧,这行得通,但我不认为这是解决这个问题的方法。正如我所说,我的专栏不是 FK 或任何可能有冲突的东西。我也可以尝试从该表中删除任何其他列,但我仍然遇到同样的错误。我会等待另一个答案或解释 你能分享你的表结构和外键映射吗? 不,我不能,它不是一个开源项目。

以上是关于外键不匹配 - “password_resets”在 dropColumn 上引用“users”的主要内容,如果未能解决你的问题,请参考以下文章

Sqlite外键不匹配sequelize迁移

Django内联外键与父主键不匹配

奇怪的 org.sqlite.SQLiteException: [SQLITE_ERROR] SQL 错误或缺少数据库(外键不匹配 -

通过重置 - 没有路线匹配 [PATCH] "/password_resets.SOLceKJXoax55zSBAfAhTQ"

Laravel 迁移外键不起作用

索引以查找外键不存在的记录