php Laravel 5 -使用迁移:回滚路径

mspsb9vt  于 2022-12-02  发布在  PHP
关注(0)|答案(4)|浏览(129)

我在前面的表中插入了一个名为im_useless的列,现在不再需要它了。
这是我的模式(文件名:2017年02月27日120313单位. 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

p1iqtdky

p1iqtdky1#

回滚函数的作用是在部署出错的情况下,给予您可以恢复到迁移之前的版本。如果您想删除不再需要的特定列,则应将其视为新的迁移,并在up()方法中删除该列。

hzbexzde

hzbexzde2#

如果您的laravel版本是〉= 5.3,您可以像包一样简单地添加迁移路径。
https://laravel.com/docs/5.3/packages#migrations
只需将以下代码放入AppServiceProvider Boot 方法中:

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

另外,如果你想递归地包含子文件夹,你可以尝试使用“/path/to/migrations/**/*”,但我不确定这是否会在旧的laravel版本中工作。

kuuvgm7e

kuuvgm7e3#

--path param就像一个过滤器。它将作用于回滚将起作用的最新迁移。您可以使用从datatabase/migrations开始的路径引用。例如:

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

如果在您的数据库中,在迁移列加上最大批处理值上有类似2022_10_03_193316_create_something.php的内容,它将起作用。
在Laravel 6上测试

kgsdhlau

kgsdhlau4#

运行composer dump-autoload并重试

相关问题