重命名另一个表

时间:2016-12-05 21:22:54

标签: php mysql laravel eloquent migration

我有一个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。

1 个答案:

答案 0 :(得分:1)

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

将其视为ID,当表的name发生变化时保持不变。

然而,docs说了不同的东西,所以删除和创建一个新的外键肯定是一件好事。

  

指向重命名表的外键不会自动更新。在这种情况下,您必须删除并重新创建外键才能使它们正常运行。