Doctrine\DBAL\DBALException : Unknown database type enum requested.
概要
Doctrine\DBALを インストールしてカラムに変更を加えるマイグレーションを実行しようとすると発生するエラーとその回避の方法についてです。
参考
- https://stackoverflow.com/questions/33140860/laravel-5-1-unknown-database-type-enum-requested
- https://laravel.com/docs/5.1/migrations#modifying-columns
- https://github.com/laravel/framework/issues/1186#issuecomment-118194746
エラーの内容
migrationでテーブルに変更を加えるときには Doctrine\DBAL をインストールする必要がある。
enum型のあるテーブルでカラムの変更を加えようとすると下記のエラーがでる。
Doctrine\DBAL\DBALException : Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.
Doctrine\DBALがenumをサポートしてないから。
Note: Renaming columns in a table with a
enum
column is not currently supported.
このエラーは変更を加えようとしているカラムがenumでなくても同じテーブルにenum型があれば発生する。
回避の方法
Doctrine\DBALがenumに引っかからないようにすれば解決するようだ。
対象のマイグレーションファイルに初期化のメソッドを追加してDoctrine\DBALがenumをstringにマップするようにする。
public function __construct() { DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); }