在Laravel迁移中将新的枚举类型添加到现有的枚举列中

时间:2019-07-31 09:31:43

标签: laravel enums migration laravel-migrations

我正在开发Laravel应用程序。我现在想做的是,我想在现有的enum列中添加一个新的enum类型。

这是首先创建/迁移枚举列的方式。

$table->enum('type', [BlogType::IMAGE, BlogType::TEXT]);

现在,我正在尝试向该列中添加新的枚举类型,以创建像这样的新迁移。

Schema::table('blogs', function (Blueprint $table) {
            $table->enum('type', [BlogType::IMAGE, BlogType::TEXT, BlogType::VIDEO])->change();
        });

如您所见,我添加了VIDEO博客类型。

运行迁移时,出现以下错误。

 Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

然后我遇到了Laravel 5.1 Unknown database type enum requested这个链接。

我尝试在迁移类的构造函数中添加以下内容。

\Illuminate\Support\Facades\DB::getDoctrineSchemaManager()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

然后在运行迁移时出现以下错误。

Unknown column type "enum" requested. Any Doctrine type that you use has to be registered with \Doctrine\DBAL\Types\Type::addType(). You can get a list of all the known types with \Doctrine\DBAL\Types\Type::getTypesMap(). If this error occurs during database introspection then you might have forgotten to register all database types for a Doctrine Type. Use AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement Type#getMappedDatabaseTypes(). If the type name is empty you might have a problem with the cache or forgot some mapping information.

现在我不重命名该列,我只是添加新的受支持的枚举值。请问,什么是最好的解决方案,我该怎么办?

1 个答案:

答案 0 :(得分:0)

目前,我们只有一种解决方案:RAW查询

public function up()
{
    DB::statement('
        ALTER TABLE `blogs` CHANGE COLUMN `type` `type` 
        ENUM("'.implode([BlogType::IMAGE, BlogType::TEXT, BlogType::VIDEO], '", "').'")
        NOT NULL
        DEFAULT "'.BlogType::IMAGE.'"
    ');
}

其中blogs是表名和type列名。