Laravel 5 - 使用migrate:使用路径回滚

时间:2017-02-27 13:22:11

标签: php laravel laravel-5.4

我已经在我之前的表格中插入了一个名为im_useless的列,我不再需要了。

这是我的架构(文件名: 2017_02_27_120313_units.php ):

public function up()
{
    Schema::create('units', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->string('im_useless');
        $table->timestamps();
    });
}

现在我尝试删除它,所以我在down()函数中使用了这段代码:

public function down()
{
    Schema::dropColumn('im_useless');
}

新架构:

public function up()
{
    Schema::create('units', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('description');
        $table->timestamps();
    });
}

现在我必须回滚然后再次迁移。我尝试仅回滚该特定迁移文件,执行php artisan help migrate:rollback我发现有一个--path选项。

所以我试图像这样回滚特定的迁移:

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

但我得到Nothing to rollback

如何删除该特定列而不必回滚任何其他迁移?

更新

我想我必须像这样更改path

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

...因为我的php shell是在项目根文件夹中打开的?

但是我仍然得到Nothing to rollback

我也试过php artisan migrate --path=2017_02_27_120313_units.phpphp artisan migrate --path=database/migrate/2017_02_27_120313_units.php

...并获取Nothing to migrate

更新2

我认为我搞砸了我的迁移表,因为我删除了down()函数中的代码,并且表从未被删除过。 https://stackoverflow.com/a/26077506/4684797

3 个答案:

答案 0 :(得分:2)

回滚功能旨在让您在迁移之前恢复到您拥有的版本,以防部署时出现问题。如果要删除不再需要的特定列,则应将其视为新迁移,并将该列放在up()方法中。

答案 1 :(得分:0)

如果您的laravel版本> = 5.3,则可以像软件包一样简单地添加迁移路径。

https://laravel.com/docs/5.3/packages#migrations

只需将此代码放入您的AppServiceProvider引导方法中即可:

$this->loadMigrationsFrom(__DIR__.'/path/to/migrations');

此外,如果您要递归包含子文件夹,则可以尝试使用“ / path / to / migrations / ** / *”,但是我不确定这是否适用于较早的laravel版本。

答案 2 :(得分:-1)

运行composer dump-autoload并重试