こんなときはどうする?マイグレーション編

PHP

0

マイグレーションファイルを扱っていると以下のようなことをしたくなることがあります。それらの対処法を紹介します。
(責任は取れないのであしからず、ご相談はTwitterのDMにて!)

過去のマイグレーションファイルのミスを修正したい

過去のマイグレーションファイルにミスが発覚、使っている箇所が限られているので修正したい。そんなときはどうすれば良いでしょうか。

エラーをデバックに表示するよう追加するなど、DBのカラムとは直接関係ない変更でしたら問題ありません。

しかし、カラム名を変えるなどをする場合は素直にマイグレーションファイルを追加するべきです。

理由としては本番DBやもしバグが起きた場合、最悪復旧不可になります。

ローカルでテスト中、カラムを追加したいテーブルを間違ったので作り直したい

一度もマイグレーションをしていない場合はマイグレーションファイルを削除してOKです。

上記でローカル内でマイグレーションをしてしまった場合

マイグレーションをしている場合は一旦ロールバックし、DBに問題ないことが確認できたのち、migrationsというDBから該当のマイグレーション履歴がありますので、行ごと削除、マイグレーションファイルを削除してください。

マイグレーション後、マイグレーションファイルを完全に削除してしまったがロールバックしたい

これはかなり難しいケースです。ですがマイグレーションを一旦全て戻し(DBの中身は空になる)再度残っているところまでマイグレーションします。

その後、もう一度マイグレーションファイルを書き直してください。

マイグレーションテンプレ

複数のテーブルに複数のカラムを追加するコードです。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateTablesColumns extends Migration
{
    const TABLES = [
        table_1,
        table_2
    ];
    const COLUMNS = [
        column_1,
        column_2
    ];
    
    /**
     * マイグレーション実行
     *
     * @return void
     */
    public function up()
    {
        foreach (self::TABLES as $table) {
            foreach (self::COLUMNS as $column) {
                if (!Schema::hasColumn($table, $column)) {
                    $table->string($column);
                }
            }
        }
    }

    /**
     * マイグレーションを元に戻す
     *
     * @return void
     */
    public function down()
    {
        foreach (self::TABLES as $table) {
            foreach (self::COLUMNS as $column) {
                if (Schema::hasColumn($table, $column)) {
                    Schema::dropColumn($column);
                }
            }
        }
    }
}
0

Posted by riku