问题
I want
to rollback only :
Rolled back: 2015_05_15_195423_alter_table_web_directories
I run
php artisan migrate:rollback
, 3 of my migration are rolling back.
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
I delete
both of my web_directories
and my contacts
table unintentionally. I never want that to happen, and if I can rollback only that specific one, this disaster will never happen.
回答1:
If you look in your migrations
table, then you’ll see each migration has a batch number. So when you roll back, it rolls back each migration that was part of the last batch.
If you only want to roll back the very last migration, then just increment the batch number by one. Then next time you run the rollback
command, it’ll only roll back that one migration as it’s in a “batch” of its own.
回答2:
Laravel 5.3+
Rollback one step. Natively.
php artisan migrate:rollback --step=1
And here's the manual page: docs.
Laravel 5.2 and before
No way to do without some hassle. For details, check Martin Bean's answer.
回答3:
Every time you rollback you get the last batch of migration. use the command
php artisan migrate:rollback --step=1
回答4:
If you can't do what is told by @Martin Bean, then you can try another trick.
Create a new migration and on that file in up() method insert what's in down() method of the migration you want to rollback and in down() method insert what's in up() method.
e.g if your original migration is like this
public function up()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
public function down()
{
Schema::drop('users');
}
then in new migration file do this
public function up()
{
Schema::drop('users');
}
public function down()
{
Schema::create('users', function(Blueprint $table)
{
$table->increments('id')->unsigned();
$table->string('name');
});
}
and then run the migrate, it will delete the table. and if you again want that back just rollback it.
回答5:
better to used refresh migrate
You may rollback & re-migrate a limited number of migrations by providing the step option to the refresh command. For example, the following command will rollback & re-migrate the last two migrations:
php artisan migrate:refresh --step=2
otherwise used rollback migrate
You may rollback a limited number of migrations by providing the step option to the rollback command. For example, the following command will rollback the last three migrations:
php artisan migrate:rollback --step=3
for more detail about migration see
回答6:
It might be a little late to answer this question but here's a very good, clean and efficient way to do it I feel. I'll try to be as thorough as possible.
Before creating your migrations create different directories like so:
database
|
migrations
|
batch_1
batch_2
batch_3
Then, when creating your migrations run the following command (using your tables as an example):
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1
or
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2
or
php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3
The commands above will make the migration file within the given directory path. Then you can simply run the following command to migrate your files via their assigned directories.
php artisan migrate alter_table_web_directories --path=database/migrations/batch_1
*Note: You can change batch_1 to batch_2 or batch_3 or whatever folder name you're storing the migration files in. As long as it remains within the database/migrations directory or some specified directory.
Next if you need to rollback your specific migrations you can rollback by batch as shown below:
php artisan migrate:rollback --step=1
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1
or
php artisan migrate:rollback --step=2
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2
or
php artisan migrate:rollback --step=3
or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3
Using these techniques will allow you more flexibility and control over your database(s) and any modifications made to your schema.
回答7:
Rollback one step. Natively.
php artisan migrate:rollback --step=1
Rollback two step. Natively.
php artisan migrate:rollback --step=2
回答8:
Use command "php artisan migrate:rollback --step=1" to rollback migration to 1 step back.
For more info check the link :- https://laravel.com/docs/master/migrations#running-migrations
回答9:
Migrate tables one by one.
Change the batch number of the migration you want to rollback to the highest.
Run migrate:rollback.
May not be the most comfortable way to deal with larger projects.
回答10:
If you want modify original migration file and migrate it again, you can use this package to migrate. (Applicable to Laravel 5.4 or later)
First, install package in your Laravel project:
composer require caloskao/migrate-specific
Register command at app/Console/Kernel.php
:
protected $commands = [
\CalosKao\MigrateSpecific::class
];
Now, run this command to migrate your file
php artisan migrate:specific database/migrations/table.php
回答11:
INSERT INTO homestead.bb_migrations (`migration`, `batch`) VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')
something like this
回答12:
1.) Inside the database, head to the migrations table and delete the entry of the migration related to the table you want to drop.
Migration table image example
2.) Next, delete the table related to the migration you just deleted from instruction 1.
Delete table image example
3.) Finally, do the changes you want to the migration file of the table you deleted from instruction no. 2 then run php artisan migrate
to migrate the table again.
回答13:
Best way is to create a new migration and make required changes in that.
Worst case workaround (if you have access to DB plus you are okay with a RESET of that table's data):
- Go to DB and delete/rename the migration entry for
your-specific-migration
- Drop the table created by
your-specific-migration
- Run
php artisan migrate --path=/database/migrations/your-specific-migration.php
This will force laravel to run that specific migration as no entry about it exists in Laravel's migration history
UPDATE: The Laravel way (Thanks, @thiago-valente)
Run:
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
and then:
php artisan migrate
This will re-run that particular migration
回答14:
As stated in the Laravel manual, you may roll back specific number of migrations using the --step
option
php artisan migrate:rollback --step=5
回答15:
If you want to rollback last migration.
php artisan migrate:rollback
If you want to rollback specific migration then go to migration table and set highest value of that record in batch. Then.
php artisan migrate:rollback
Currently i'm working on laravel 5.8 if not working any other version of laravel please inform to me.
来源:https://stackoverflow.com/questions/30287896/rollback-one-specific-migration-in-laravel