如何在 laravel 迁移中更改外键引用 table 名称

How to change foreign key reference table name in laravel migration

我在迁移中有这一行 table

Schema::create('xyzTableName', function (Blueprint $table) {
    $table->id();
    $table->unsignedBigInteger('userId');
    $table->foreign('userId')->references('id')->on('userId');
    $table->timestamps();
});

我写错了 on('userId') 我想要的是 on('users')

现在我这样做了,(在新的迁移中,因为我不能 运行 migrate:fresh

 Schema::create('xyzTableName', function (Blueprint $table) {
            $table->foreign('userId')->references('id')->on('users')->change();
        });

但我不知道为什么它不起作用,请帮助我

您可以删除旧密钥并创建一个新密钥

Schema::table('xyzTableName', function (Blueprint $table) {
    $table->dropForeign('xyzTableName_users_userId_foreign');
    $table->foreign('userId')->references('id')->on('users');
});

Laravel 将始终尝试使用其模式创建密钥。由于您没有遵循 laravel 推荐的名称和字段模式,我无法确定字符串 'xyzTableName_users_userId_foreign' 是否正确。

在您的数据库中检查外键名称。这是我要使用的命令 If MySQL

SELECT
    TABLE_NAME,
    COLUMN_NAME,
    CONSTRAINT_NAME,
    REFERENCED_TABLE_NAME,
    REFERENCED_COLUMN_NAME
FROM
    INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
    REFERENCED_TABLE_SCHEMA = 'db_name'
    AND REFERENCED_TABLE_NAME = 'table_name'
    AND REFERENCED_COLUMN_NAME = 'column_name';

Reference