kzk0829’s blog

機械学習の学習のアウトプット+技術的な事+ポエム

Laravelのマイグレーションでカラム名を変更する

やりたいこと

今まではSquelProでポチポチとテーブル作成なり変更を行っていたが、マイグレーションを使ってみた。
作成したテーブルを見ると、あるカラムにtypoが。。。

refleshrefreshに変えていきたいと思う。

doctrine/dbalの追加

Laravel公式ドキュメントによると

カラムを変更する前に、composer.jsonファイルでdoctrine/dbalを確実に追加してください。Doctrine DBALライブラリーは現在のカラムの状態を決め、指定されたカラムに対する修正を行うSQLクエリを生成するために、使用しています。

とのことなので

$ composer require doctrine/dbal

実行。
doctrine/dbalが追加されたことを確認。

マイグレーションファイルの作成

次に、Schema変更のために新しいマイグレーションファイルを作成する。

$ php artisan make:migration rename_to_table --table=your_table_name

今回は既存のテーブルに対する変更をかけるため、--tableオプションでテーブル名を指定する必要がある。
するとマイグレーションファイルが作られるので、upメソッド内とdownメソッド内に処理を追加する。
変更に際してはrenameColumnメソッドを使用。
以下のように説明がある。

カラム名を変更するには、renameColumnメソッドをスキーマビルダで使用してください。カラム名を変更する前に、composer.jsonファイルでdoctrine/dbalを依存パッケージとして追加してください。

カラム名変更処理追加

renameColumnの使い方は、$table->renameColumn("before_column_name", "after_column_name")

なので使用例は以下。

public function up()
{
    Schema::table('your_table_name', function (Blueprint $table) {
        $table->renameColumn("reflesh_token", "refresh_token");
    });
}

public function down()
{
    Schema::table('your_table_name', function (Blueprint $table) {
        $table->renameColumn("refresh_token", "reflesh_token");
    });
}

downメソッドでは逆のことをすれば良い。 そしてDBに入ってカラム名が変更されていればOK!