ロールバックのみ
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
テーブルを見ると、各移行にはバッチ番号が付いています。そのため、ロールバックすると、最後のバッチの一部であった各マイグレーションがロールバックされます。
最後のマイグレーションのみをロールバックしたい場合は、バッチ番号を1だけ増やしてください。それから、次回rollback
コマンドを実行するときには、その1回の移行のみがロールバックされます。
ロールバックするたびに、最後の移行バッチが得られます。コマンドを使う
php artisan migrate:rollback --step=1
@Martin Beanで指示されていることができない場合は、別のトリックを試すことができます。
新しいマイグレーションを作成し、そのファイルにin up()メソッドでロールバックするマイグレーションのwhat's in down()メソッドを挿入し、in down()メソッドでin 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');
});
}
その後、移行を実行すると、テーブルが削除されます。そして、あなたが再びそのバックが欲しいならば、単にそれをロールバックしてください。
この質問に答えるのは少し遅れるかもしれませんが、これを行うための非常に優れた、クリーンで効率的な方法があります。できるだけ徹底的に努力します。
マイグレーションを作成する前に、以下のように異なるディレクトリーを作成してください。
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
これらのテクニックを使用することはあなたのデータベースとあなたのスキーマになされたどんな変更に対してもあなたにもっと柔軟性とコントロールを可能にするでしょう。
マイグレーションを1ステップ前にロールバックするには、コマンド "php artisan migrate:rollback --step = 1"を使用してください。
詳細については、リンクを確認してください。 - https://laravel.com/docs/master/migrations#running-migrations
1ステップロールバックします。ネイティブに.
php artisan migrate:rollback --step=1
2ステップロールバックネイティブに.
php artisan migrate:rollback --step=2
テーブルを1つずつ移行します。
ロールバックするマイグレーションのバッチ番号を最大に変更します。
Migrate:rollbackを実行します。
大規模なプロジェクトに対処するための最も快適な方法ではないかもしれません。
refresh migrate を使用することをお勧めします。
Refreshコマンドにstepオプションを指定することで、限られた数のマイグレーションをロールバックして再マイグレーションすることができます。たとえば、次のコマンドは最後の2つの移行をロールバックして再移行します。
php artisan migrate:refresh --step=2
そうでなければ rollback migrate
Rollbackコマンドにstepオプションを指定することで、限られた数のマイグレーションをロールバックできます。たとえば、次のコマンドは最後の3回の移行をロールバックします。
php artisan migrate:rollback --step=3
移行の詳細についてはを参照してください。
元の移行ファイルを変更して再度移行したい場合は、 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')
このようなもの
Laravel manual に記載されているように、--step
オプションを使用して特定の数のマイグレーションをロールバックできます。
php artisan migrate:rollback --step=5
最善の方法は、新しい移行を作成し、その中に必要な変更を加えることです。
最悪の場合の回避策(if DBにアクセスできます+ そのテーブルのデータのRESETで大丈夫です):
your-specific-migration
の移行エントリの名前を変更しますyour-specific-migration
によって作成されたテーブルphp artisan migrate --path=/database/migrations/your-specific-migration.php
を実行しますLaravelの移行履歴にエントリが存在しないため、laravelはその特定の移行を強制的に実行します。
1.)データベース内で、マイグレーションテーブルに移動し、削除したいテーブルに関連するマイグレーションのエントリを削除します。
2.)次に、削除したばかりの移行に関連するテーブルを手順1から削除します。
3.)最後に、命令番号から削除したテーブルの移行ファイルに必要な変更を加えます。 2その後、php artisan migrate
を実行してテーブルを再度移行します。