Php 如何在Symfony 2/Doctrine中启用枚举

Php 如何在Symfony 2/Doctrine中启用枚举,php,mysql,symfony,doctrine,Php,Mysql,Symfony,Doctrine,运行doctrine:mapping:import时,我得到一个错误: 请求的未知数据库类型enum,条令\DBAL\Platforms\MySqlPlatform可能不支持它 似乎我需要将use_native\u enum设置为true某种方式。但是,所有文档和博客帖子都引用SymfonydoctrineTypeMapping=array( 'tinyint'=>'boolean', “smallint”=>“smallint”, 'mediumint'=>'integer', 'int'=>

运行
doctrine:mapping:import
时,我得到一个错误:

请求的未知数据库类型enum,条令\DBAL\Platforms\MySqlPlatform可能不支持它


似乎我需要将
use_native\u enum
设置为
true
某种方式。但是,所有文档和博客帖子都引用Symfony<1.4。Symfony 2中有什么解决方案吗

对于Symfony 2项目,将其添加到
app/config.yml
中的原则dbal配置中:

doctrine:
    dbal:
        mapping_types: 
            enum:       string 
我的完整条令配置如下所示:

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        mapping_types:
            enum: string
            set: string
            varbinary: string
            tinyblob: text

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true
代码改编自

然后运行:


app/console原则:schema:update--force--dump sql--ansi

考虑到原则手册仅提供了如何将枚举解释为字符串的部分答案,无论原则是如何配置的,以下内容都应该起作用

错误指向文件名:
Doctrine\DBAL\Platforms\MySqlPlatform
.php-在那里,您会发现默认列表嵌入在函数
InitializedActineTypeMappings
中,如下所示:

$this->doctrineTypeMapping=array(
'tinyint'=>'boolean',
“smallint”=>“smallint”,
'mediumint'=>'integer',
'int'=>'integer',
(...)
为所有条令用户添加简单的枚举支持,不管设置的其余部分如何,只需通过扩展列表来实现:

'enum' => 'string'

是的,这是可行的,但问题是,我猜它会从数据库中删除所有枚举类型,当您执行“php应用程序/控制台原则:模式:更新-强制”时,在Symfony 4应用程序中遇到了这个问题,使用
原则:迁移:diff
,这个答案仍然对其进行排序:-)发生在我身上的奇怪事情是,包含
enum
的迁移已成功迁移,但此后我无法迁移任何迁移!我将运行此命令
php-bin/console-make:migration
,但它显示的错误如下:请求的未知数据库类型enum,Doctrine\DBAL\Platforms\MySQL57Platform可能不支持它。对我来说效果很好,谢谢Mate我想你会在cookbook的文章中找到你问题的答案。但是当
原则:映射:导入
启动时,把这段代码放在哪里运行呢?有点晚了,但我认为我的答案对你来说是正确的@umpirsky从“第三方”更改代码是个坏主意。当您想要更新此代码(您想要:新功能、安全性等)时,您所做的更改也将被替换。