symfony2 manytomany generate consultas php mysql symfony doctrine

php - manytomany - Cómo habilitar ENUM en Symfony 2/Doctrine



manytomany doctrine symfony (2)

Cuando ejecuto doctrine:mapping:import obtengo un error:

Tipo de base de datos desconocido enum solicitado, Doctrine / DBAL / Platforms / MySqlPlatform puede no ser compatible.

Parece que necesito establecer use_native_enum para true cierto cómo. Sin embargo, toda la documentación y publicaciones de blog se refieren a Symfony <1.4. ¿Hay alguna que sería la solución en Symfony 2?


Para los proyectos de Symfony 2, agréguelo a la configuración dbal de doctrine en app/config.yml :

doctrine: dbal: mapping_types: enum: string

Mi configuración de doctrina completa se ve así:

# 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

Código adaptado desde here

Entonces corre:

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


Teniendo en cuenta que el libro de cocina de Doctrine solo proporciona respuestas parciales sobre cómo hacer que las enums se interpreten como cadenas, lo siguiente debería funcionar independientemente de cómo esté configurado Doctrine.

El error lo señala al nombre del archivo: Doctrine/DBAL/Platforms/MySqlPlatform .php - allí, encontrará que la lista predeterminada está incrustada en la función initializeDoctrineTypeMappings siguiente manera:

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

La adición de soporte de enumeración simple para todos los usuarios de doctrina, independientemente del resto de la configuración, se logra simplemente ampliando la lista con:

''enum'' => ''string''