如何在Symfony 2 / Doctrine中启用ENUM

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

Doctrine \ DBAL \ Platforms \ MySqlPlatform可能不支持未知的数据库types枚举。

看来我需要设置use_native_enumtrue如何。 但是,所有文档和博客文章都是指Symfony <1.4。 Symfony 2中有没有什么解决scheme?

对于Symfony 2项目,将其添加到app/config.yml的doctrine dbalconfiguration中:

 doctrine: dbal: mapping_types: enum: string 

我完整的教条configuration看起来像这样:

 # 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

考虑到Doctrine食谱只能提供关于如何将枚举解释为string的部分答案,无论如何configurationDoctrine,以下都应该工作。

错误指出你在文件的名字: Doctrine\DBAL\Platforms\MySqlPlatform .php – 在那里,你会发现默认列表embedded在函数initializeDoctrineTypeMappings ,如下所示:

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

无论设置的其余部分如何,为所有学说用户添加简单的枚举支持,只需通过扩展列表来实现:

 'enum' => 'string'