Laravelで移行を安全に削除する


206

Laravelには、移行を作成するためのコマンドがあるようですが、削除はできません。

移行コマンドを作成します。

php artisan migrate:make create_users_table

移行を削除したい場合、database / migrationsフォルダー内の対応する移行ファイルを安全に削除できますか?

移行ファイル:

2013_05_31_220658_create_users_table

回答:


375

誤った名前のマイグレーションを誤って作成しました(コマンド:)php artisan migrate:make。私は実行されませんでしたphp artisan migrate私はそれを削除することを決めたので、)移行を。私のステップ:

  1. 移行ファイルを手動で削除します app/database/migrations/my_migration_file_name.php
  2. composerオートロードファイルをリセットします。 composer dump-autoload
  3. リラックス

移行を実行した場合(php artisan migrate)、これを実行できます。

a)実行migrate:rollback-最後の移行を元に戻す正しい方法です(Thnx @Jakobud)

b)migrate:rollback機能しない場合は、手動で実行します(以前のバージョンのmigrate:rollbackのバグを覚えています)。

  1. 移行ファイルを手動で削除します app/database/migrations/my_migration_file_name.php
  2. composerオートロードファイルをリセットします。 composer dump-autoload
  3. データベースを変更します。マイグレーションテーブルから最後のエントリを削除します。

2
ありがとう。移行を削除した後の私にとっての問題は、composer dump-autoloadを実行するのを忘れていた
Theo Kouzelis '27

7
移行を実行した場合、「適切な」方法はmigrate:rollback、移行をロールバックしてから移行ファイルを削除してオートロードをダンプすることです。dbやmigrationsテーブルをハックする必要はありません。
Jake Wilson

(PHP職人の移行)(Y)以降のステップのための偉大な答え
イムラン・カーン

私の神と私は私が間違っていたときに自分を苦しめました。ありがとうございました。
Pablo Contreras 2017年

4. DBから実際のテーブルを削除します
Jin

64

移行が実行された場合(読み取り:移行済み)、移行をロールバックして、データベーステーブルから履歴をクリアする必要があります。ロールバックしたら、移行ファイルを安全に削除して、もう一度移行を続行できます。


しかし、彼はマイグレーションを実行していません。実際に行わなかった操作をロールバックすることはできませんか?
ステファン2013年

9
できませんが、その場合は移行データベースに履歴が保存されていないはずです。つまり、ファイルを安全に削除できます。
Jason Lewis

14
 php artisan migrate:fresh

あなたが開発中であり、望ましい結果が最初からやり直すことであるならば、仕事をするべきです。

本番環境では、それは望ましいことではない可能性があるため、宣伝する必要があります。(migrate:freshコマンドは、データベースからすべてのテーブルを削除してから、migrateコマンドを実行します)。


5
3票?OPは、データベース全体を破棄して更新するのではなく、移行を削除する方法を求めました。これはひどいアドバイスです。自分が何をしているのかを知らない限り、これを行わないでください。
グッドバイト2018年

最初に説明しているmigrate:refreshmigrate:freshの違いについて親切に読んでください。後者の方法は部分的なリセットを行い、手作業を回避します!
joash

1
migrate:freshはすぐにすべてのテーブルを削除し、初めて実行する場合と同様に移行を再実行します。それについては部分的なものは何もありません。データはすべて失われます。問題は修正されますが、質問に対する有効な回答ではありません。
Goodbytes


7

誤ってcreate_users_tableを2回作成しました。一部のクラスをオーバーライドし、ロールバックをErrorExceptionに変更しました。

あなたがする必要があるのは、vendor / composerフォルダでautoload_classmap.phpを見つけて、次のようなコードの特定の行を探すことです

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

パスを編集します。その後、ロールバックは問題ないはずです。


あなたが-私のように-一緒に行って移行ファイルの名前を変更した場合、これがあなたが探している答えです!ありがとう。
Berdus、2014

2
また、単に「composer dumpautoload」を実行することもできます
FooBar

5

現在の回答に同意します。もう少し情報を追加したいだけです。

Laravel 5.3以降のバージョンに新しい機能が追加され、単一の移行をバックアウトできるようになりました。

php artisan migrate:rollback --step=1

後、手動で移行ファイルを削除します database/migrations/my_migration_file_name.php

これは、移行を実行するときに優れた機能です

このようにして、2段階でのみlaravelの移行を安全に削除できます


0

むしろ手動でやります

  1. 最初にモデルを削除します(不要な場合)。モデルが不要になります。
  2. ...database/migrationsフォルダーから移行を削除する
  3. すでに移行している場合、つまりをすでに実行php artisan migrateしている場合は、phpmyadminまたはSQL(どちらの場合でも)にログインし、データベースで、移行によって作成されたテーブルを削除します。
  4. 引き続きデータベース内のmigrationsフォルダーで、その移行ファイル名の行を見つけて、その行を削除します。

私にとってはうまくいきます。


-2

これは私にとってはうまくいきます:

  1. データベース内のすべてのテーブル、主に移行テーブルを削除しました。
  2. php artisan migrate:refresh

laravel 5.5.43で

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.