我在前面的表中插入了一个名为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.php
和php artisan migrate --path=database/migrate/2017_02_27_120313_units.php
...并获得Nothing to migrate
更新2
我想我已经搞砸了我的迁移表,因为我删除了down()
函数中的代码,而该表从未被删除。https://stackoverflow.com/a/26077506/4684797
4条答案
按热度按时间p1iqtdky1#
回滚函数的作用是在部署出错的情况下,给予您可以恢复到迁移之前的版本。如果您想删除不再需要的特定列,则应将其视为新的迁移,并在up()方法中删除该列。
hzbexzde2#
如果您的laravel版本是〉= 5.3,您可以像包一样简单地添加迁移路径。
https://laravel.com/docs/5.3/packages#migrations
只需将以下代码放入AppServiceProvider Boot 方法中:
另外,如果你想递归地包含子文件夹,你可以尝试使用“/path/to/migrations/**/*”,但我不确定这是否会在旧的laravel版本中工作。
kuuvgm7e3#
--path param就像一个过滤器。它将作用于回滚将起作用的最新迁移。您可以使用从datatabase/migrations开始的路径引用。例如:
如果在您的数据库中,在迁移列加上最大批处理值上有类似2022_10_03_193316_create_something.php的内容,它将起作用。
在Laravel 6上测试
kgsdhlau4#
运行composer dump-autoload并重试