Laravel 中更新 Enum 类型的字段异常

当用 Laravel 的数据迁移来更新 Enum 类型的字段时,比如:修改字段名

Schema::table('table_name', function (Blueprint $table) {
  $table->renameColumn('from', 'to');
});

当执行迁移命令的时候:

php artisan migrate

会报异常:

DoctrineDBALDBALException:Unknown database type enum requested, 
DoctrineDBALPlatformsMySQL57Platform may not support it.

当遇到这个问题的时候,首先确保已经安装了扩展 doctrine/dbal ,因为 Laravel 官方文档已经提到:

在修改字段之前,请确保将 doctrine/dbal 依赖添加到 composer.json 文件中。Doctrine DBAL 库用于确定字段的当前状态, 并创建对该字段进行指定调整所需的 SQL 查询

如果没有安装此扩展,请执行命令安装:

composer require doctrine/dbal

然后修改迁移文件

DB::getDoctrineSchemaManager()
    ->getDatabasePlatform()
    ->registerDoctrineTypeMapping('enum', 'string');

Schema::table('pattern_column_orders', function (Blueprint $table) {
    $table->renameColumn('payment', 'payment_method');
});

这时候再执行迁移命令发现已经可以成功执行了

原文地址:https://www.cnblogs.com/songlen/p/13305306.html