回滚 laravel5 中的特定迁移

Posted

技术标签:

【中文标题】回滚 laravel5 中的特定迁移【英文标题】:Rollback a specific migration in laravel5 【发布时间】:2017-10-21 08:17:01 【问题描述】:

我需要回滚一个特定的表,因为我忘了提到外键。 而且我不希望所有表中的数据丢失。

我的框架是 Laravel 5.4

提前谢谢大家

【问题讨论】:

【参考方案1】:

你可以的

php artisan migrate:rollback --path=/database/migrations/your_file.php

【讨论】:

【参考方案2】:

我是这样做的:

    手动删除表; 转到“迁移”表并删除迁移的相应行; php artisan migrate; 完成

例如,如果您修改了名为“设置”的迁移,则从 DB 和迁移表中删除此表,然后重新运行 artisan 命令。

【讨论】:

【参考方案3】:

迁移旨在按特定顺序应用和回滚。因此,没有“正确”的方式重新应用任意迁移。

无论如何,至少有两种选择:

    “失败转发”- 创建后续迁移,创建必要的 FK 并应用它。如果您已经投入生产,这是唯一正确的方法。

    如果您只是处于开发的早期阶段并且不想让迁移目录膨胀,您可以

    转储表格以便保留数据 回滚到此特定迁移 修复和测试迁移 迁移 从转储中加载数据

【讨论】:

+1 。是的,这是开发阶段,我正在做我的学期项目。我是 laravel 的新手,我得到了你的第 2 点,请你进一步解释第 1 点。 只需创建一个新的迁移,添加缺少的 FK 并迁移您的数据库。【参考方案4】:

不幸的是,没有一个选项可以回滚每个表的迁移。您只能使用step 参数回滚最近的迁移或最近几次迁移。

但是如果你真的需要,有一种方法可以做到这一点。对于要回滚的迁移,您可以将迁移表中的 batch 值设置为高于最近迁移的数字。当您调用php artisan migrate:rollback 时,只有更改了batch 值的特定迁移文件才会回滚。

【讨论】:

如何通过 laravel 命令设置批号还是手动设置?如果设置了批号。我应该在 cmdprpmt/终端上运行什么命令提前谢谢 您需要在db中手动设置批号,设置一个高于当前最高的数字。完成后,您可以运行正常的回滚命令来回滚这些迁移php artisan migrate:rollback。您还可以通过运行php artisan migrate:rollback --pretend 来验证更改批处理值后会受到影响的迁移

以上是关于回滚 laravel5 中的特定迁移的主要内容,如果未能解决你的问题,请参考以下文章

工匠迁移:laravel 5.3 中的回滚错误

回滚特定迁移而不回滚其他迁移

仅在 Asp.net 中回滚到特定迁移

Laravel 删除表,迁移不回滚

Laravel 5.5 中的迁移问题

Laravel 模型查找旧表名