【问题标题】:Renaming a table that is a foreign key in another table重命名作为另一个表中的外键的表
【发布时间】:2017-04-20 09:31:57
【问题描述】:

我有一个表格 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');

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

【问题讨论】:

    标签: php mysql laravel eloquent migration


    【解决方案1】:

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

    将其视为ID,当表格的name 更改时,它保持不变。

    但是,docs 表示不同,因此删除并创建一个新的外键绝对是一件好事。

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

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 2021-04-17
      • 2012-05-11
      • 1970-01-01
      相关资源
      最近更新 更多