🍣

doctrine/dbalでカラムの型が変更できなかったときの対処法(Laravel)

2021/05/10に公開

カラムの名前や型を変更するには、基本的に doctrine/dbalを使用すればちょちょいのちょいだと思うのですが、なぜか僕の場合はstringからintに変更する際にうまくいきませんでした。

原因は不明なままですが、回避策がありましたのでそちらを紹介します。

通常はdoctrine/dbalでできるはず

ライブラリをインストールして、

composer require doctrine/dbal

マイグレーションファイル内でこのように記述すればstringからint型に変更できる

public function up()
{
    Schema::table('products', function (Blueprint $table) {
        $table->integer('product_id')->default(NULL)->change();
    });
}

はずだった。

回避策

どのようなエラーが出たかも忘れましたが、このようにすれば変更できました。

public function up()
{
    DB::statement('ALTER TABLE products MODIFY product_id INT NULL;');
}

SQLを書いちゃう方法もできるんですね。

一応カラム名の変更とかは doctrine/dbal ライブラリでいけたので、基本は doctrine/dbal を使用するのが楽で安心だと思います。

終わりに

複数のやり方を知っておくと、1つのやり方で困ったときに別のやり方でできるので、色んな方法を知っておくほうが良いなあと痛感しました。
もうマイグレーションには負けない。

Discussion