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''