web-dev-qa-db-ja.com

Laravel内の特定の移行をロールバックします

が欲しいです

ロールバックのみ

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_directoriescontactsテーブルの両方が意図せずに使われています。私はそれが起こることを決して望みません、そして、もし私がその特定のものだけをロールバックすることができれば、この災害は決して起こりません。

165
kyo

migrationsテーブルを見ると、各移行にはバッチ番号が付いています。そのため、ロールバックすると、最後のバッチの一部であった各マイグレーションがロールバックされます。

最後のマイグレーションのみをロールバックしたい場合は、バッチ番号を1だけ増やしてください。それから、次回rollbackコマンドを実行するときには、その1回の移行のみがロールバックされます。

105
Martin Bean

Laravel 5.3以上

1ステップロールバックします。ネイティブに.

php artisan migrate:rollback --step=1

そしてこれがマニュアルページです: docs


Laravel 5.2以前

手間をかけずにやる方法はありません。詳しくは、Martin Beanの 答え を確認してください。

176

ロールバックするたびに、最後の移行バッチが得られます。コマンドを使う

php artisan migrate:rollback --step=1
19
PAUL KIARIE

@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');
    });
}

その後、移行を実行すると、テーブルが削除されます。そして、あなたが再びそのバックが欲しいならば、単にそれをロールバックしてください。

16
Nehal Hasnayeen

この質問に答えるのは少し遅れるかもしれませんが、これを行うための非常に優れた、クリーンで効率的な方法があります。できるだけ徹底的に努力します。

マイグレーションを作成する前に、以下のように異なるディレクトリーを作成してください。

    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

これらのテクニックを使用することはあなたのデータベースとあなたのスキーマになされたどんな変更に対してもあなたにもっと柔軟性とコントロールを可能にするでしょう。

8
Andre F.

マイグレーションを1ステップ前にロールバックするには、コマンド "php artisan migrate:rollback --step = 1"を使用してください。

詳細については、リンクを確認してください。 - https://laravel.com/docs/master/migrations#running-migrations

4
Shah-Kodes

1ステップロールバックします。ネイティブに.

php artisan migrate:rollback --step=1

2ステップロールバックネイティブに.

php artisan migrate:rollback --step=2
4
Terminal

テーブルを1つずつ移行します。

ロールバックするマイグレーションのバッチ番号を最大に変更します。

Migrate:rollbackを実行します。

大規模なプロジェクトに対処するための最も快適な方法ではないかもしれません。

3
Jeffz

refresh migrate を使用することをお勧めします。

Refreshコマンドにstepオプションを指定することで、限られた数のマイグレーションをロールバックして再マイグレーションすることができます。たとえば、次のコマンドは最後の2つの移行をロールバックして再移行します。

php artisan migrate:refresh --step=2

そうでなければ rollback migrate

Rollbackコマンドにstepオプションを指定することで、限られた数のマイグレーションをロールバックできます。たとえば、次のコマンドは最後の3回の移行をロールバックします。

php artisan migrate:rollback --step=3

移行の詳細についてはを参照してください。

3
Jignesh Joisar

元の移行ファイルを変更して再度移行したい場合は、 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
2
Calos Kao
INSERT INTO Homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

このようなもの

1
Harry Bosh

Laravel manual に記載されているように、--stepオプションを使用して特定の数のマイグレーションをロールバックできます。

php artisan migrate:rollback --step=5
0
Slav Levin

最善の方法は、新しい移行を作成し、その中に必要な変更を加えることです。

最悪の場合の回避策(if DBにアクセスできます+ そのテーブルのデータのRESETで大丈夫です):

  1. DBに移動し、delete/your-specific-migrationの移行エントリの名前を変更します
  2. ドロップyour-specific-migrationによって作成されたテーブル
  3. php artisan migrate --path=/database/migrations/your-specific-migration.phpを実行します

Laravelの移行履歴にエントリが存在しないため、laravelはその特定の移行を強制的に実行します。

0
Deepak Thomas

1.)データベース内で、マイグレーションテーブルに移動し、削除したいテーブルに関連するマイグレーションのエントリを削除します。

移行テーブルイメージ例

2.)次に、削除したばかりの移行に関連するテーブルを手順1から削除します。

表画像削除例

3.)最後に、命令番号から削除したテーブルの移行ファイルに必要な変更を加えます。 2その後、php artisan migrateを実行してテーブルを再度移行します。

0
Kidali Kevin