カラム名を変更したいが、エラーが出力されている...なぜ...?
こちら解決するまでに色々と試行錯誤したので、解決手順を記事として残します。
もくじ
本記事の内容
- 背景
- エラー文
- 結論
- カラム名を変更する手順
- 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で何かライブラリをインストールする事は、億劫になりがちですが、公式にも記載ある事なので、臆する事なく、インストールしちゃいましょう!