我有一个neighboorhoods表和一个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');
为什么我不必修改约束?我检查了数据库中的约束,现在它指向邻域表而不是neighboorhoods。
答案 0 :(得分:1)
我也遇到过这样的情况。显然,InnoDB不使用表名作为约束的引用:它使用一些内部标识(不确定其他数据库类型)。
将其视为ID
,当表的name
发生变化时保持不变。
然而,docs说了不同的东西,所以删除和创建一个新的外键肯定是一件好事。
指向重命名表的外键不会自动更新。在这种情况下,您必须删除并重新创建外键才能使它们正常运行。