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

标签 mysql database laravel migration

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

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

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

最佳答案

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

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

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

这样做的结果是迁移始终按照您添加迁移的顺序运行

这通常应该有助于解决外键问题。如果您通过迁移来构建表迁移,那么直接添加外键应该没问题。

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

  1. 请密切注意创建表的顺序,以便新表所依赖的所有表都已存在。
  2. 只需按照您的建议添加外键即可

我认为单独添加外键的想法不是一个坏主意。但是,我不会在新的迁移中坚持使用它。这意味着,如果您决定需要一个新表,该表对另一个现有表具有外键约束,只需直接添加约束即可。那么就不需要额外的迁移。

关于mysql - 在 Laravel 的单独迁移中(或在任何迁移工作流程中)添加外键是否是更好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28951207/

相关文章:

oracle - 如何在本地计算机上复制 Oracle 11g 数据库(数据+结构)以进行开发?

.net - 是否可以让两个应用程序在分布式事务中使用相同的数据库而无需实现资源管理器?

javascript - Laravel 连接多个表来获取数据

MySQL 将表/列设置为变量

mysql - Laravel Eloquent 根据条件进行多重选择

database - 如何在 Dart (Flutter) 中获取每个可迭代值的索引号

laravel - Lumen 5.4 与 Laravel Mailable

php - 使用 php mariadb 检索特定时间数据的问题

php - 教义2 : Generate entities based on entity class

mysql - Laravel 4 播种口音