LoginSignup
0

More than 1 year has passed since last update.

【Laravel】migrate実行時の Base table or view already exists ~ や Column already exists〜 のエラー対応

Last updated at Posted at 2023-03-24

対象

migrate実行後に、マイグレーションファイルのファイル名のみを変更してstatusを実行済にしたい人向け。

結論

マイグレーションファイルのupメソッド内をコメントアウトしてmigrateを実行します。

2023_03_21_192233_create_items_table.php
    public function up()
    {
//        Schema::create('items', function (Blueprint $table) {
//            $table->unsignedInteger('id');
//            $table->string('name');
//        });
    }

※これは実行済のmigrationファイルのファイル名のみを変更した時だけを想定しています。

エラーの原因

既に実行済のマイグレーションファイルのファイル名を変更すると、新規のマイグレーションファイル扱いとなりmigrate実行前になる。

$ php artisan migrate:status

| No   | 2023_03_21_192233_create_items_table

これで、migrateを実行すると既にテーブルやカラムが存在する状態なので表題のエラーが出る。

今までしていたエラー回避

ロールバック

developブランチなどにマージ前の作業ブランチでmigrateした時は、他のブランチに切り替える際都度ロールバックを行い不要なテーブルやカラムは元に戻した状態にする。

php artisan migrate:rollback --step=1

→レコードが全てなくなるので再度テストしたいときに面倒。developにマージ後にmigrateをする。

テーブル、カラムを削除

ロールバックは行わず、追加したテーブルやカラムをGUIツールやSQLなどで削除をしてmigrateを実行する。already exists~のエラーはでずmigrateできる。
→これも、レコードが全てなくなるので再度テストしたいときに面倒。

結論のコメントアウトについて

Schema::create~をコメントアウトして実行することで、migrateは実行済状態になり、データも失われずにファイル名の変更だけができました。

他にいい方法などがあれば、コメントお待ちしおります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0