如何在Symfony 2 / Doctrine中启用ENUM

时间:2011-11-29 14:18:35

标签: php mysql symfony doctrine

运行doctrine:mapping:import时出现错误:

  

请求未知的数据库类型枚举,Doctrine \ DBAL \ Platforms \ MySqlPlatform可能不支持它。

我似乎需要将use_native_enum设置为true一些方法。但是,所有文档和博客文章都引用了Symfony< 1.4。在Symfony 2中有什么解决方案吗?

2 个答案:

答案 0 :(得分:118)

对于Symfony 2项目,将其添加到app/config.yml中的doctrine 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

代码改编自here

然后运行:

app/console doctrine:schema:update --force --dump-sql --ansi

答案 1 :(得分:-1)

考虑到Doctrine cookbook仅提供关于如何使枚举解释为字符串的部分答案,无论Doctrine如何配置,以下内容都应该有效。

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

$this->doctrineTypeMapping = array(
            'tinyint'       => 'boolean',
            'smallint'      => 'smallint',
            'mediumint'     => 'integer',
            'int'           => 'integer',
            (...)

为所有学说用户添加简单的枚举支持,无论其他设置如何,都可以通过扩展列表来实现:

'enum' => 'string'