>最初我想使用一个数组来跟踪产品照片的图像路径。我决定用引用我的"库存"表的单独"图片"表替换此列。这允许我使用自动递增的"图像"id"作为图像名称的一部分,以确保唯一性。
我进行了一次迁移,删除了"image_paths"列,然后创建了一个包含各种列的新"图像"表。我在迁移的第二部分有一个拼写错误,我定义了新表。当我运行迁移时,它失败了,但"image_paths"列被删除了。所以我无法回滚,因为迁移从未注册过。我也无法再次运行迁移,因为它会尝试删除不存在的列。
我的最佳选择是手动添加"image_paths"列,然后运行迁移吗?从现在开始,我是否应该避免在每次迁移中对多个表进行更改?
这是我的建议,
-
基本上有两种方法
up()
和down()
;请记住将 down() 与 up() 一起实现,因为当您在调用up()
的artisan migrate
遇到问题时,您需要使用调用down()
artisan migrate:rollback
回滚您的模式。
作为 每个作业一个迁移分成多个迁移;类似于单一责任原则。例如,如果需要删除列,请创建一个新表,为关系创建一个新外键,然后至少进行 3 次迁移。
切勿让迁移直接在生产环境中运行,而无需在本地和暂存环境中进行测试。对于本地和暂存,不需要数据备份,因为您有
Seeder
(本地、暂存)或production_data.sql
(暂存)。如果迁移在本地和暂存计算机上运行没有任何问题,那么对于生产环境应该没问题。确保永远不要编辑/更新生产环境中的迁移,您将杀死自己。
这些就是我所做的,并且在迁移方面没有遇到任何问题。
-
最好的方法是备份您的数据库条目。迁移期间可能会出现多个致命错误。
-
更改特定表中的列时,请确保先添加所有内容,然后删除或删除不需要的列。由于删除是一个相当危险的举动,因此您需要确保在其他可能的操作完成后完成。
-
为了进一步降低风险,您可能需要在不同的迁移文件中分隔多个操作。确保每个操作都成功完成,然后继续下一个操作。
遵循这些规则,一切都应该很好。