1

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

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

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

4

2 回答 2

2

这里我的建议,

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

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

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

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

于 2014-11-22T19:12:50.273 回答
1
  1. 最好的方法是备份您的数据库条目。迁移过程中可能会出现多个致命错误。

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

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

遵循这些规则,一切都会好起来的。

于 2014-11-22T02:32:09.603 回答