【问题标题】:Do you keep original Laravel migrations when they become obsolete?当它们过时时,你会保留原始的 Laravel 迁移吗?
【发布时间】:2019-08-11 09:16:25
【问题描述】:

我们的 Laravel 应用程序中有很多迁移。现在我们正在进行一些更改,以使某些表过时,并且我们实际上想要重命名某些表中的某些列。

执行该更改的最佳做法是什么?

  1. 您是否保持旧迁移的原样并尝试添加一个相应地更改所有受影响的表和列的迁移?
  2. 能否只更新旧迁移并删除不再需要的表的迁移?

我确信这两种方法各有利弊。

【问题讨论】:

  • 迁移的目的是为多个不同的数据库提供一条路径,以便随着时间的推移与应用程序的架构保持一致,但这并不总是必要的。例如,如果您是唯一的开发人员或者您还没有投入生产,那么拥有每个模式更改的完整历史记录并不重要。就个人而言,我会在适当的时候定期整合我的迁移。

标签: mysql laravel migration


【解决方案1】:

我个人认为第一种方法是最佳做法,原因如下。我们知道,当您迁移时,迁移会存储在迁移表中,这就是它们只迁移一次的原因。现在,如果您更新一个并尝试迁移,您将不会得到任何东西,因为此迁移已经完成。至于删除迁移,确实不建议这样做,因为您最终可能会更改服务器或需要新的数据库,这可能会导致您出现问题。

保持迁移流程非常重要。即使这意味着添加和删除表。当然,这会使您的迁移文件夹更大更笨重,但这是安全的选择。您可以通过使用适当的项目规划并尽量减少迁移次数来避免这种情况。

【讨论】:

  • 谢谢。我很感激你的回答。这是否意味着您必须在迁移的 down() 方法中更改表/列名称,否则这些名称将保持为空?
  • @molerat down 方法的目的是为了逆向迁移。通常最好的做法是反转你在 up 方法中所做的事情,即使你知道你永远不会这样做。所以最好不要让它们为空
【解决方案2】:

要进行这些更改,请创建一个新的迁移来删除旧表并重命名需要重命名的字段。

对于第 2 点,可以在本地开发的同时更新旧迁移。并且在尚未在生产服务器上运行迁移的情况下。

这在项目的初始开发阶段通常是可以接受的。

在具有修改的迁移文件的生产服务器上运行php artisan migrate 不会更新数据库(因为数据库日志执行了迁移)。

正如@khaldoun-nd 所提到的,最好保持迁移流程,仅在需要时创建它们,并在您知道您的预期代码运行良好时进行部署。

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2015-07-03
    • 2015-04-25
    • 2015-11-11
    • 2012-03-08
    • 2019-05-21
    • 2015-02-09
    • 2020-11-21
    • 1970-01-01
    相关资源
    最近更新 更多