我想
仅回滚:
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
表都无意中。我从不希望这种情况发生,如果我只能回滚那个特定的,那么这场灾难就永远不会发生。
Laravel 5.3+
回滚一步。本机。
php artisan migrate:rollback --step=1
这是手册页:docs。
Laravel 5.2 及之前版本
没有一些麻烦是没有办法的。有关详细信息,请查看 Martin Bean 的 answer。
如果您查看 migrations
表,您会看到每个迁移都有一个批号。因此,当您回滚时,它会回滚上一批中的每个迁移。
如果您只想回滚最后一次迁移,则只需将批号加一即可。然后,下次您运行 rollback
命令时,它只会回滚该一次迁移,因为它属于自己的“批处理”。
或者,从 Laravel 5.3 开始,你可以运行:
php artisan migrate:rollback --step=1
这将回滚最后一次迁移,无论它的批号是多少。
migrations
SET batch
=2 WHERE migration
='name_of_the_migration';
最好的方法是创建一个新的迁移并在其中进行必要的更改。
最坏情况的解决方法(如果您有权访问 DB,并且您可以重置该表的数据):
转到数据库并删除/重命名 your-specific-migration 的迁移条目删除由 your-specific-migration 创建的表运行 php artisan migrate --path=/database/migrations/your-specific-migration.php
这将迫使 laravel 运行特定的迁移,因为 Laravel 的迁移历史中不存在关于它的条目
更新:Laravel 方式(谢谢,@thiago-valente)
跑:
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
接着:
php artisan migrate
这将重新运行该特定迁移
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
最后是 php artisan migrate
每次回滚时,您都会获得最后一批迁移。使用命令
php artisan migrate:rollback --step=1
更好地使用刷新迁移
您可以通过向 refresh 命令提供 step 选项来回滚和重新迁移有限数量的迁移。例如,以下命令将回滚并重新迁移最后两次迁移:
php artisan migrate:refresh --step=2
否则使用回滚迁移
您可以通过向 rollback 命令提供 step 选项来回滚有限数量的迁移。例如,以下命令将回滚最后三个迁移:
php artisan migrate:rollback --step=3
有关迁移的更多详细信息see
如果您不能按照@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');
});
}
然后运行迁移,它将删除表。如果你再次想要回滚它。
尝试这个:
php artisan migrate:rollback --step=1
这适用于 Laravel 5.3 +
回答这个问题可能有点晚了,但我觉得这是一种非常好的、干净和有效的方法。我会尽量做到彻底。
在创建迁移之前创建不同的目录,如下所示:
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
使用这些技术将使您能够更灵活地控制您的数据库以及对您的模式所做的任何修改。
如果您有权访问数据库,则可以使用更简单的解决方案。您可以从迁移表中删除记录,然后删除该表。与 SQL 客户端。
或者可以使用
php artisan migrate:rollback --path=...
像许多答案一样。记住路径是位置。您甚至可以像这样删除模块迁移。 (任何从任何地方迁移)
php artisan migrate:rollback --path=Modules/YourModule/database/migrations/2020_05_15_xxxxxx_create_your_table.php
请记住,如果您使用的是 Linux 服务器,请注意区分大小写。您必须添加 /Database/Migrations 之类的起始资金。
/Database/Migrations/2020_05_15_xxxxxx_create_your_table.php
您可以使用
php artisan migrate:rollback --path=/database/migrations/timestamp_filename.php
这将删除该特定迁移。如果文件有外键依赖,我希望你使用 drop 方法。对于这些情况,请尝试创建一个新的迁移并在需要时删除外部文件。
回滚一步。本机。
php artisan migrate:rollback --step=1
回滚两步。本机。
php artisan migrate:rollback --step=2
如果要回滚上次迁移。
php artisan migrate:rollback
如果要回滚特定迁移,请转到迁移表并批量设置该记录的最高值。然后。
php artisan migrate:rollback
目前我正在使用 laravel 5.8,如果不能使用任何其他版本的 laravel,请通知我。
一张一张地迁移表。
将要回滚的迁移的批号更改为最高。
运行迁移:回滚。
可能不是处理大型项目的最舒适的方式。
使用命令“php artisan migrate:rollback --step=1”将迁移回滚到 1 步。
有关更多信息,请查看链接:- https://laravel.com/docs/master/migrations#running-migrations
如果您想修改原始迁移文件并重新迁移,可以使用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
php artisan:migrate --path=database/migrations/my_migration.php
来实现。在您执行此操作之前,请确保 migrations
表没有 my_migration
条目。
1.)在数据库内部,前往迁移表并删除与要删除的表相关的迁移条目。
2.) 接下来,删除与您刚刚从说明 1 中删除的迁移相关的表。
3.)最后,对您从指令号中删除的表的迁移文件进行您想要的更改。 2 然后运行 php artisan migrate
再次迁移表。
php artisan migrate:rollback --path=/database/migrations/0000_00_00_0000_create_something_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
如果您需要使用相同的迁移多次执行此操作,则可以替代上述方法。我个人认为这为您的迁移增加了很多灵活性。
将 database/migrations
添加到 composer.json
中的自动加载对象,如下所示:
"autoload": {
"psr-4": {
"App\\": "app/"
},
"classmap": [
"database/seeds",
"database/factories",
"database/support",
"database/migrations" // add this line
]
},
然后将 namespace Database\Migrations;
添加到您的所有迁移文件中。
然后运行 $ composer dump-autoload
以刷新您的 composer.lock
文件。
然后,假设您的迁移类名称是 AlterTableWebDirectories
,您可以创建如下命令:
$ php artisan make:command DropAlterTableWebDirectories
并在您的 handle()
方法中编写此逻辑:
public function handle {
(new AlterTableWebDirectories)->down();
DB::raw("delete from migrations where migration like '%alter_table_web_directories%'");
}
这将完全符合您的要求。如果您想减少迁移计数而不是删除它,您可能可以弄清楚如何更改 DB:raw
命令。
可以扩展此命令以允许您通过将参数传递给命令来动态选择要删除它的迁移。
然后,当您阅读以再次迁移该文件时,您只需运行 php artisan migrate
,它只会迁移该文件。
此过程允许您对迁移进行特定更改,而无需每次都进行完全刷新和播种。
就我个人而言,我需要做很多,因为我的种子相当大。
仅回滚特定迁移非常容易。
由于命令 php artisan migrate:rollback
,撤消上一次数据库迁移,迁移执行的顺序存储在 migrations
表的 batch
字段中。
您可以编辑要回滚的迁移的批处理值并将其设置为较高。然后,您可以通过简单的方式回滚该迁移:
php artisan migrate:rollback
编辑相同的迁移后,您可以使用简单的方法再次执行它
php artisan migrate
注意:如果两个或多个迁移具有相同的更高值,它们将同时回滚。
不定期副业成功案例分享