2011-11-29 21 views
34

Cuando se ejecuta doctrine:mapping:import consigo un error:Cómo habilitar ENUM en Symfony 2/Doctrina

Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

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

+0

Creo que encontrará una respuesta a su pregunta en [MySQL Enums] (http: // www.doctrine-project.org/docs/orm/2.1/en/cookbook/mysql-enums.html) cookbook art icle. –

+0

Un poco tarde pero creo que mi respuesta es correcta para ti @umpirsky – PutzKipa

+1

¿Pero dónde poner este código para que se ejecute cuando se inicia 'doctrine: mapping: import'? – umpirsky

Respuesta

108

Para Symfony 2 proyectos, añadir esto a la configuración DBAL doctrina en app/config.yml:

doctrine: 
    dbal: 
     mapping_types: 
      enum:  string 

Mi config doctrina completo es el siguiente:

# 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 de here

Entonces ejecutar:

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

+5

sí, esto funciona, pero el problema, supongo que es que borra todos los tipos de enumeración de la base de datos cuando se hace una "doctrina de la aplicación php/console: schema: update --force" – mahen3d

0

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 se señala en el nombre del archivo: Doctrine\DBAL\Platforms\MySqlPlatform .php - ahí, usted encontrará que la lista predeterminada está incrustado en la función initializeDoctrineTypeMappings de la siguiente manera:

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

Añadir soporte enumeración sencilla para todos los usuarios de doctrina, independientemente del resto de la configuración, simplemente se logra extendiendo la lista con:

'enum' => 'string'