Laravel / Lumen

【Lumen】migrationでカラム名を変更する方法

悩んでいる人

カラム名を変更したいが、エラーが出力されている...なぜ...?

こちら解決するまでに色々と試行錯誤したので、解決手順を記事として残します。

本記事の内容

  • 背景
    • エラー文
  • 結論
  • カラム名を変更する手順
    • doctrine/dbalの2系をインストール
    • マイグレーションファイルを作成
    • マイグレーションファイルを編集
    • マイグレーションを実行
  • 最後に
  • 参考サイト

カラム名を変更したい事って、往々にしてあると思います。

僕と同じ様にエラーが出て、詰まっている方の参考になれば幸いです!

背景

カラム名を変更する必要があり、Laravelの公式を確認した所、「doctrine/dbal」ライブラリをcomposerでインストール必要があった。

しかし、公式の流れでライブラリをインストールして、migrateを実行した時、エラーが出て上手くいかなかった...

エラー文

Class 'Doctrine\DBAL\Driver\PDOPgSql\Driver' not found

結論

doctrine/dbalをインストールする時、2系を指定する必要がある。

$ composer require "doctrine/dbal:2.*"

現状バージョンを指定せず、インストールした場合、3系がインストールされてしまう。

3系と2系では、vendor内のdoctrine/dbalのディレクトリ構成に違いがあり、migrateする時に参照先が変わるため、Laravelのバージョンに合わせて、doctrine/dbalのバージョンも合わせる必要がある。

カラム名を変更する手順

doctrine/dbalの2系をインストール

$ composer require "doctrine/dbal:2.*"

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

$ php artisan make:migration rename_変更前のカラム名_to_変更後のカラム名_on_テーブル名_table

マイグレーションファイルを編集(下記は例)

<?php

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

class RenameColumnBeforeToColumnAfterOnSampleTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::connection('DB名')->table('テーブル名', function (Blueprint $table) {
            $table->renameColumn('変更前のカラム名', '変更後のカラム名');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::connection('DB名')->table('テーブル名', function (Blueprint $table) {
          $table->renameColumn('変更後のカラム名', '変更前のカラム名');
        });
    }
}

マイグレーションを実行

$ php artisan migrate

最後に

Laravelでカラム名を変更・削除するときは、必ず「doctrine/dbal」が必要!!という学びを得られました。案件によっては、composerで何かライブラリをインストールする事は、億劫になりがちですが、公式にも記載ある事なので、臆する事なく、インストールしちゃいましょう!

参考サイト

  • この記事を書いた人

nose-blog | えいた

未経験からwebエンジニアへ ▶︎ フロントエンドエンジニア ▶︎ Typescript / React / Nextjs / Flutter ▶︎ ガジェット大好き

-Laravel / Lumen
-, ,