我想要的

仅回退:

回滚:2015_05_15_195423_alter_table_web_directories


我跑

PHP artisan migrate:rollback,我的3个迁移都在回滚。

Rolled back: 2015_05_15_195423_alter_table_web_directories
Rolled back: 2015_05_13_135240_create_web_directories_table
Rolled back: 2015_05_13_134411_create_contacts_table

我删除

我的web_directory和我的联系人表都是无意的。我不希望发生这种情况,如果我只能回滚特定的一个,这种灾难就永远不会发生。


当前回答

最好的方法是创建一个新的迁移,并在其中进行所需的更改。

最坏的情况下的解决方案(如果你有DB的访问权限,加上你可以对该表的数据进行重置):

转到DB,为特定的迁移删除/重命名迁移条目 删除由您的特定迁移创建的表 运行php artisan migrate——path=/database/migrations/your-specific-migration.php

这将迫使laravel运行特定的迁移,因为在laravel的迁移历史中不存在关于它的条目

更新:Laravel方式(谢谢,@thiago-valente)

运行:

PHP工匠迁移:rollback——path=/database/migrations/your-specific-migration.php

然后:

PHP工匠迁移

这将重新运行特定的迁移

其他回答

如果您查看您的迁移表,那么您将看到每个迁移都有一个批编号。因此,当您回滚时,它将回滚上一批中的每个迁移。

如果您只想回滚最后一次迁移,那么只需将批批号增加1。然后,下次运行rollback命令时,它将只回滚一次迁移,因为它是在自己的“批处理”中。

或者,从Laravel 5.3开始,你可以运行:

php artisan migrate:rollback --step=1

这将回滚最后一次迁移,不管它的批号是什么。

正如Laravel手册中所述,您可以使用——step选项回滚特定数量的迁移

php artisan migrate:rollback --step=5

如果您想修改原始迁移文件并再次迁移它,您可以使用这个包进行迁移。(适用于Laravel 5.4或以上版本)

首先,在你的Laravel项目中安装包:

composer require caloskao/migrate-specific

在app/Console/Kernel.php中注册命令:

protected $commands = [
    \CalosKao\MigrateSpecific::class
];

现在,运行这个命令来迁移文件

php artisan migrate:specific database/migrations/table.php

1)。在数据库中,转到迁移表并删除与要删除的表相关的迁移条目。

迁移表映像示例

2)。接下来,删除与刚才从指令1中删除的迁移相关的表。

删除表映像示例

3)。最后,对从指令no中删除的表的迁移文件进行您想要的更改。2然后运行PHP artisan migrate重新迁移表。

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