You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel:如何修改migrate:rollback命令支持直接传入文件夹参数?

实现自定义迁移回滚命令的方法

1. 创建自定义命令类

在app/Console/Commands目录下新建CustomMigrateRollback.php,代码如下:

<?php

namespace App\Console\Commands;

use Illuminate\Database\Console\Migrations\RollbackCommand;
use Symfony\Component\Console\Input\InputArgument;

class CustomMigrateRollback extends RollbackCommand
{
    protected $signature = 'migrate:rollback {folder : 迁移文件夹名称} {--step=1 : 回滚步数} {--database= : 指定数据库连接}';

    protected $description = '回滚指定文件夹下的数据库迁移';

    public function handle()
    {
        // 读取传入的文件夹参数,拼接完整路径
        $folder = $this->argument('folder');
        $path = database_path("migrations/{$folder}");

        // 给命令设置path选项,复用原命令的逻辑
        $this->input->setOption('path', $path);

        // 调用父类的回滚逻辑
        return parent::handle();
    }

    protected function getArguments()
    {
        // 新增folder必填参数
        return array_merge(parent::getArguments(), [
            ['folder', InputArgument::REQUIRED, '迁移文件所在的子文件夹'],
        ]);
    }
}

2. 替换原命令

打开app/Providers/AppServiceProvider.php,在register方法中添加替换逻辑,让Laravel用自定义命令替代原生的migrate:rollback:

<?php

namespace App\Providers;

use App\Console\Commands\CustomMigrateRollback;
use Illuminate\Database\Console\Migrations\RollbackCommand;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->extend(RollbackCommand::class, function ($originalCommand, $app) {
            return new CustomMigrateRollback($app['migrator']);
        });
    }

    public function boot()
    {
        // 其他启动逻辑
    }
}

3. 测试使用

现在可以直接用简化后的命令回滚指定文件夹的迁移:

# 基础用法,回滚admin文件夹下的最后1次迁移
php artisan migrate:rollback admin

# 回滚2步
php artisan migrate:rollback admin --step=2

# 指定数据库连接回滚
php artisan migrate:rollback admin --database=secondary_db

该方案完全复用Laravel原生迁移回滚的所有逻辑,仅新增参数解析和路径自动拼接功能,不会破坏原有命令的其他特性。

内容的提问来源于stack exchange,提问作者Elisaveta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:31:19