我有一张表 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/