Laravelでマイグレーションを変更(DB設計変更)する方法

Laravelのマイグレーション処理は仕様の癖が多少あり、特に外部キー追加ではエラーに苦しめられました。

ある時、テーブルに外部キーを追加(カラム追加)しようと、作成したマイグレーションに再定義して、以下のコマンドを実行しました。

// シーダーも同時に実行
$ php artisan migrate:refresh --seed

案の定、外部キー参照先がバラバラでエラー。

改めて、Laravelマイグレーションの正しい再定義の方法がわかりスッキリしたので、その方法を備忘録がわりに公開します。

 

【やりたいこと】

userテーブルにtagテーブルの外部キーを追加したい

【環境】

Laravel 5.6

MySQL 5.7

 

※ マイグレーションの注意事項はこちらの記事で紹介しています

Laravelのマイグレーションで外部キーが通らない場合の確認事項
Laravelのマイグレーションで外部キーを含めたテーブルを作成した際に詰まったのでメモ。 Laravelの仕様とカラムの型を理解すれば、外部キー設定のマイグレーションを失敗することは大幅に軽減すると思うので、今回は気をつける点を解説...

 

再定義用のMigrationファイルを作成

基本的にテーブル新規作成と同じ(わかりやすいようにupdate_users_tableにします

$ php artisan make:migration update_users_table

 

 

Migrationファイル(update_users_table)を編集

public function run() {    
    // users テーブル定義を変更する   
    Schema::table('users', function (Blueprint $table){     
        // 新規カラムを追加する(今回は外部キー)        
        $table->unsignedInteger('tag_id');   
    });
}

public function down(){
    // 実行を戻すための処理
    Schema::table('users', function (Blueprint $table) {     
        $table->dropColumn('tag_id');   
    });
}

 

 

Migrationを実行

$ php artisan migrate

 

Migration実行を戻す

down()が実行されます。

$ php artisan migrate:rollback