处理中途失败的多表Laravel迁移的最佳方法是什么?

时间:2014-11-21 23:29:28

标签: laravel migration multi-table

最初我想使用数组来跟踪产品截图的图像路径。我决定用一个引用我的'inventory'表的单独'images'表替换这个列。这允许我使用自动递增'图像''id'作为图像名称的一部分,以确保唯一性。

我进行了一次迁移,删除了'image_paths'列,然后创建了一个包含各种列的新'images'表。我在迁移的第二部分中输入了一个拼写错误,我在其中定义了新表。当我运行迁移时失败了,但是'image_paths'列被删除了。所以我无法回滚,因为迁移从未注册过。我也无法再次运行迁移,因为它会尝试删除不存在的列。

我最好还是手动添加'image_paths'列,然后再运行迁移?从现在开始,我是否应该避免每次迁移对多个表进行更改?

2 个答案:

答案 0 :(得分:2)

这是我的建议,

  1. 基本上有两种方法up()down(); 请记住将down()与up()一起实现,因为当您遇到调用artisan migrate的{​​{1}}时出现问题时,您需要使用{{回滚模式1}}调用up()

  2. 每个职位分开进行多次迁移;类似于单一责任原则。例如,如果需要删除列,创建新表,为关系创建新的外键,则至少进行3次迁移。

  3. 永远不要在没有测试本地和暂存的情况下直接在生产上运行迁移。对于本地和登台,不需要数据备份,因为您有artisan migrate:rollback(本地,登台)或down()(登台)。如果迁移在本地和临时计算机上运行没有任何问题,那么对于生产环境应该没问题。确保永远不要编辑/更新生产环境中的迁移,您将自己被杀。

  4. 这些就是我所做的,并且没有遇到任何迁移问题。

答案 1 :(得分:1)

  1. 最好的方法是备份数据库条目。迁移过程中可能会出现多个致命错误。

  2. 更改特定表中的列时,请确保先添加所有内容,然后删除或删除不需要的列。因为删除是一个相当危险的举动,所以你需要确保在完成其他可能的操作后完成删除。

  3. 为了进一步降低风险,您可能希望将不同迁移文件中的多个操作分开。确保每个操作都成功完成,然后转到下一个操作。

  4. 遵循这些规则,一切都应该没问题。