我在尝试在 Laravel 中进行迁移时遇到了一些问题。我拥有的表越多,尝试重做迁移的次数就越多,并且当之前使用基于尚未创建的表的外键运行一次迁移时,我会遇到几个外键约束错误。
简单地在各自的迁移中创建所有表,然后进行特定的外键迁移是否可能会出现问题?有没有办法指定它始终最后运行?每个带有外键的表是否应该有自己的迁移,或者将所有外键包含在一个迁移中会更干净吗?
我希望这不会显得太主观。到目前为止,我在 Laravel 中构建模型层方面所看到的一切似乎都非常有条理,具有特定的做事方式。我不确定我是否还没有找到此过程的工作流程文档。
最佳答案
Laravel 的迁移名称包含时间戳。例如默认用户迁移:
2014_10_12_000000_create_users_table.php
^^^^^^^^^^^^^^^^^
除了创建唯一的文件名(即使您有两次create_users_table
)之外,此时间戳还用于将迁移按顺序排序。准确地说,是开发人员创建它们的顺序。
这样做的结果是迁移始终按照您添加迁移的顺序运行
这通常应该有助于解决外键问题。如果您通过迁移来构建表迁移,那么直接添加外键应该没问题。
但是,如果您要将现有数据库(架构)转换为 Laravel 迁移,您必须:
- 请密切注意创建表的顺序,以便新表所依赖的所有表都已存在。
- 只需按照您的建议添加外键即可
我认为单独添加外键的想法不是一个坏主意。但是,我不会在新的迁移中坚持使用它。这意味着,如果您决定需要一个新表,该表对另一个现有表具有外键约束,只需直接添加约束即可。那么就不需要额外的迁移。
关于mysql - 在 Laravel 的单独迁移中(或在任何迁移工作流程中)添加外键是否是更好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951207/