我正在开发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.
现在我不重命名该列,我只是添加新的受支持的枚举值。请问,什么是最好的解决方案,我该怎么办?
答案 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
列名。