php - 重命名一个表是另一个表中的外键

标签 php mysql laravel eloquent migration

我有一张表 neighboorhoods 和一张表 schools,其中包含一个 neighboorhood_id 字段。

当我看到拼写错误时,我想将名称更改为正确的形式。

首先我使用了 phpStorm 的名称重构工具并将模型更改为 Neighborhood,然后我添加了 $table = 'neighboorhood'。

然后我进行了迁移以重命名表,删除了 $table 属性,一切正常。

我以为它会抛出一个错误,因为外键约束是这样创建的:

$table->foreign('neighboorhood_id')->references('id')->on('neighboorhoods')->onDelete('cascade');

现在无需更新即可运行:

$table->foreign('neighborhood_id')->references('id')->on('neighborhoods')->onDelete('cascade');

为什么我不必修改约束条件?我检查了数据库中的约束,现在它指向 neighbourhoods 表而不是 neighboorhoods。

最佳答案

我也遇到过这样的情况。显然 InnoDB 不使用表名作为对约束的引用:它使用一些内部标识代替(不确定其他数据库类型)。

把它想象成一个 ID,当表的 name 改变时它保持不变。

然而,docs说些不同的话,所以删除并创建一个新的外键绝对是一件好事。

Foreign keys that point to the renamed table are not automatically updated. In such cases, you must drop and re-create the foreign keys in order for them to function properly.

关于php - 重命名一个表是另一个表中的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40983590/

相关文章:

php - Laravel - 禁用与 Redis 的连接 - 不再需要

php - 如何用PHP调用本地网页

php - 选择我没有的数据库项目

php - AngularJS 和 Silex 的 CORS 问题(PHP - Apache)

mysql - 如何在windows的命令行中找到mysql数据目录

mysql - SQL Server减去MySQL功能

php - Laravel 5.3 在 ubuntu16.04 nginx 中使用命令composer install --no-dev 上传

javascript - 当我运行 npm run dev 时如何知道编译哪个文件

php - PHP 中如何实现超时?

php - DOMDocument/Xpath 在长时间的命令行过程中泄漏内存 - 任何解构此类的方法