如何在Symfony 2 /Doctrine中启用ENUM

2022-08-30 12:09:45

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

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

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


答案 1

对于 Symfony 2 项目,将其添加到以下部分中的 doctrine dbal 配置中:app/config.yml

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 doctrine:schema:update --force --dump-sql --ansi


答案 2

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

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

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

为所有 doctrine 用户添加简单的枚举支持,而不考虑设置的其余部分,只需通过以下方式扩展列表即可实现:

'enum' => 'string'

推荐