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



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

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

我的最佳选择是手动添加"image_paths"列,然后运行迁移吗?从现在开始,我是否应该避免在每次迁移中对多个表进行更改?

这是我的建议,

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

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

  4. 切勿让迁移直接在生产环境中运行,而无需在本地和暂存环境中进行测试。对于本地和暂存,不需要数据备份,因为您有Seeder(本地、暂存)或production_data.sql(暂存)。如果迁移在本地和暂存计算机上运行没有任何问题,那么对于生产环境应该没问题。确保永远不要编辑/更新生产环境中的迁移,您将杀死自己。

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

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

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

  3. 为了进一步降低风险,您可能需要在不同的迁移文件中分隔多个操作。确保每个操作都成功完成,然后继续下一个操作。

遵循这些规则,一切都应该很好。

相关内容

  • 没有找到相关文章

最新更新