我想要的

仅回退:

回滚: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和我的联系人表都是无意的。我不希望发生这种情况,如果我只能回滚特定的一个,这种灾难就永远不会发生。


当前回答

如果您需要多次执行相同的迁移,则可以使用上述方法。我个人认为这为您的迁移增加了很大的灵活性。

将数据库/迁移添加到composer中的自动加载对象中。Json是这样的:

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories",
            "database/support",
            "database/migrations" // add this line
        ]
    },

然后添加命名空间Database\Migrations;到所有迁移文件。

然后运行$ composer dump-autoload来刷新你的composer。锁文件。

然后,假设你的迁移类名是AlterTableWebDirectories,你可以创建这样的命令:

$ php artisan make:command DropAlterTableWebDirectories

并在handle()方法中写入以下逻辑:

public function handle {
   (new AlterTableWebDirectories)->down();
   DB::raw("delete from migrations where migration like '%alter_table_web_directories%'");
}

这正是你想要的。如果您希望减少迁移计数而不是删除它,您可能会弄清楚如何更改DB:raw命令。

可以对该命令进行扩展,使您可以通过向该命令传递参数来动态地选择要删除的迁移。

当你再次读取迁移文件时,你可以运行php artisan migrate,它只会迁移那一个。

这个过程允许您对迁移进行特定的更改,而不必每次都进行完全刷新和播种。

就我个人而言,我需要经常这样做,因为我的种子相当大。

其他回答

如果您需要多次执行相同的迁移,则可以使用上述方法。我个人认为这为您的迁移增加了很大的灵活性。

将数据库/迁移添加到composer中的自动加载对象中。Json是这样的:

"autoload": {
        "psr-4": {
            "App\\": "app/"
        },
        "classmap": [
            "database/seeds",
            "database/factories",
            "database/support",
            "database/migrations" // add this line
        ]
    },

然后添加命名空间Database\Migrations;到所有迁移文件。

然后运行$ composer dump-autoload来刷新你的composer。锁文件。

然后,假设你的迁移类名是AlterTableWebDirectories,你可以创建这样的命令:

$ php artisan make:command DropAlterTableWebDirectories

并在handle()方法中写入以下逻辑:

public function handle {
   (new AlterTableWebDirectories)->down();
   DB::raw("delete from migrations where migration like '%alter_table_web_directories%'");
}

这正是你想要的。如果您希望减少迁移计数而不是删除它,您可能会弄清楚如何更改DB:raw命令。

可以对该命令进行扩展,使您可以通过向该命令传递参数来动态地选择要删除的迁移。

当你再次读取迁移文件时,你可以运行php artisan migrate,它只会迁移那一个。

这个过程允许您对迁移进行特定的更改,而不必每次都进行完全刷新和播种。

就我个人而言,我需要经常这样做,因为我的种子相当大。

INSERT INTO homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

就像这样

如果您可以访问数据库,则有一个更简单的解决方案。您可以从迁移表中删除记录,然后删除表。SQL客户端。

或者可以使用

php artisan migrate:rollback --path=... 

就像很多答案一样。记住路径是Location。您甚至可以像这样删除模块迁移。(从任何地方迁移)

php artisan migrate:rollback --path=Modules/YourModule/database/migrations/2020_05_15_xxxxxx_create_your_table.php

记住,如果你使用的是linux服务器,小心区分大小写。你必须在开头加上/Database/Migrations。

/Database/Migrations/2020_05_15_xxxxxx_create_your_table.php

最好使用刷新迁移

您可以通过回滚和重新迁移有限数量的迁移 为刷新命令提供step选项。例如, 以下命令将回滚并重新迁移最后两次迁移:

php artisan migrate:refresh --step=2

否则使用回滚迁移

通过提供该步骤,可以回滚有限数量的迁移 选项。例如,下面的命令 将回滚最后三次迁移:

php artisan migrate:rollback --step=3

有关迁移的详细信息,请参见

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