在 Laravel 中的单独迁移中添加外键(或在任何迁移工作流程中)是否更好?

Is it better practice to add foreign keys in a separate migration in Laravel (or in any migration workflow for that matter)?

我一直在 运行 尝试在 Laravel 中进行迁移时遇到一些问题。我拥有的 table 越多,我尝试重做迁移的次数就越多,并且当一次迁移 运行 之前我 运行 遇到几个外键约束错误基于尚未创建的 table 的外键。

简单地在各自的迁移中创建所有 table,然后进行特定的外键迁移是否会出现问题?有没有办法指定它总是 运行 最后?每个 table 和外键是否应该每个 table 都有自己的迁移,或者将所有外键包含在一个迁移中会更干净吗?

我希望这不会太主观。到目前为止,我所看到的在 Laravel 中构建模型层的所有内容似乎都非常有条不紊,具体的做事方式。我不确定我是否还没有找到此过程的工作流文档。

Laravel 的迁移名称包含时间戳。例如默认用户迁移:

2014_10_12_000000_create_users_table.php
^^^^^^^^^^^^^^^^^

除了创建唯一的文件名(即使您有两次 create_users_table)之外,此时间戳还用于将迁移置于 顺序 中。准确的说,是开发者创建它们的顺序。

结果是迁移总是运行按照您添加的顺序

这通常有助于解决外键问题。如果您通过迁移构建 table 迁移,您应该可以直接添加外键。

但是,如果您要将现有数据库(架构)转换为 Laravel 迁移,您要么必须:

  1. 请密切注意创建 table 的顺序,以便新的 table 所依赖的所有 table 都已经存在。
  2. 然后按照您的建议添加外键

我不认为单独添加外键是个坏主意。但是我不会坚持使用它进行新的迁移。意思是如果你决定你需要 one new table 对另一个有外键约束,already existing table,只是直接添加约束。那么就不需要额外的迁移了。