仅回滚:
Rolled back: 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_directories
和我的contacts
表。我从来不希望这种情况发生,如果我只能回滚那个特定的灾难,那么这场灾难将永远不会发生。
如果您查看migrations
表,那么您将看到每个迁移都有一个批号。因此,当您回滚时,它会回滚作为最后一批的一部分的每次迁移。
如果您只想回滚最后一次迁移,则只需将批次编号增加一。然后,下次运行rollback
命令时,它将仅回滚那个迁移,因为它在自己的“批处理”中。
如果要修改原始迁移文件并再次迁移,可以使用this package进行迁移。 (适用于Laravel 5.4或更高版本)
首先,在Laravel项目中安装包:
composer require caloskao/migrate-specific
在app/Console/Kernel.php
注册命令:
protected $commands = [
\CalosKao\MigrateSpecific::class
];
现在,运行此命令以迁移您的文件
php artisan migrate:specific database/migrations/table.php
INSERT INTO homestead.bb_migrations (`migration`, `batch`) VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')
这样的事情
作为stated in the Laravel manual,您可以使用--step
选项回滚特定数量的迁移
php artisan migrate:rollback --step=5
1.)在数据库内部,转到迁移表并删除与要删除的表相关的迁移条目。
2.)接下来,从指令1中删除与刚刚删除的迁移相关的表。
3.)最后,对您从指令号中删除的表的迁移文件进行所需的更改。 2然后运行php artisan migrate
再次迁移表。
最好的方法是创建一个新的迁移并进行必要的更改。
最糟糕的情况解决方法(如果您可以访问数据库加上您可以使用该表的数据重置):
your-specific-migration
的迁移条目your-specific-migration
创建的表格php artisan migrate --path=/database/migrations/your-specific-migration.php
这将强制laravel运行特定的迁移,因为Laravel的迁移历史记录中不存在任何条目
每次回滚都会得到最后一批迁移。使用该命令
php artisan migrate:rollback --step=1
如果你不能做@Martin Bean所说的话,你可以尝试另一种技巧。
在up()方法中创建一个新的迁移并在该文件上插入要回滚的迁移的down()方法,并在down()方法中插入up()方法中的内容。
例如,如果您的原始迁移是这样的
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
public function down()
{
Schema::drop('users');
}
然后在新的迁移文件中执行此操作
public function up()
{
Schema::drop('users');
}
public function down()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
然后运行migrate,它将删除该表。如果你又想要那回来就回滚它。
回答这个问题可能有点迟,但我觉得这是一个非常好,干净,有效的方法。我会尽量做到尽可能彻底。
在创建迁移之前,创建不同的目录,如下所示:
database
|
migrations
|
batch_1
batch_2
batch_3
然后,在创建迁移时运行以下命令(以表格为例):
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1
要么
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2
要么
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3
上面的命令将使迁移文件在给定的目录路径中。然后,您只需运行以下命令即可通过其分配的目录迁移文件。
php artisan migrate alter_table_web_directories --path=database/migrations/batch_1
*注意:您可以将batch_1更改为batch_2或batch_3或您正在存储迁移文件的任何文件夹名称。只要它保留在database / migrations目录或某个指定目录中。
接下来,如果您需要回滚特定迁移,则可以按批处理回滚,如下所示:
php artisan migrate:rollback --step=1
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1
要么
php artisan migrate:rollback --step=2
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2
要么
php artisan migrate:rollback --step=3
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3
使用这些技术可以更灵活地控制数据库以及对模式所做的任何修改。
回滚一步。本身。
php artisan migrate:rollback --step=1
回滚两步。本身。
php artisan migrate:rollback --step=2
使用命令“php artisan migrate:rollback --step = 1”将回滚迁移回1步。
有关更多信息,请查看链接: - https://laravel.com/docs/master/migrations#running-migrations
更好地使用刷新迁移
您可以通过向refresh命令提供步骤选项来回滚和重新迁移有限数量的迁移。例如,以下命令将回滚并重新迁移最后两次迁移:
php artisan migrate:refresh --step=2
否则使用回滚迁移
您可以通过向rollback命令提供步骤选项来回滚有限数量的迁移。例如,以下命令将回滚最后三次迁移:
php artisan migrate:rollback --step=3
有关迁移see的更多详细信息
逐个迁移表。
将要回滚的迁移的批次编号更改为最高。
运行migrate:rollback。
处理大型项目可能不是最舒适的方式。