如何在 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';