2012-03-16 22 views
13

Tengo unas pocas columnas en el esquema de mi base de datos que tienen tipos de datos de bit y tengo problemas con el mapeo de Doctrine2. Sigo recibiendo:Solución de Doctrine2 para mapear el tipo de datos 'bit' de MySql

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

¿Hay algún problema? Estaba pensando simplemente en cambiar el tipo de datos a booleano y simplemente usar declaraciones verdaderas y falsas, pero eso significaría cambiar el esquema a gran escala para lo que no tengo tiempo.

+0

[respuesta similares] (http://stackoverflow.com/a/12925885/495132) para permitir ENUM –

+0

poco tarde, pero Doctrina recomienda para este tipo tinyint booleanas con mysql (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#mapping-matrix). ¿Podrías convertir las columnas de bits a tinyint? – BigJ

Respuesta

5

Puede crear su propio tipo personalizado para Doctrine.

  1. Cree un nuevo tipo extendiendo la clase Doctrine\DBAL\Types\Type.
  2. Anular convertToPHPValue() y convertToDatabaseValue() métodos.
  3. El registro de un nuevo tipo:

    \Doctrine\DBAL\Types\Type::addType('abc', 'Your\\Custom\\Type\\AbcType'); 
    
    $dbPlatform = $em->getConnection()->getDatabasePlatform(); 
    $dbPlatform->registerDoctrineTypeMapping('abc', 'abc'); 
    

Leer más en la Doctrina documentation pages

+0

¿me puede sugerir desde dónde debería ejecutar ese código (desde el símbolo del sistema? Estoy en Windows): $ dbPlatform = $ em-> getConnection() -> getDatabasePlatform(); $ dbPlatform-> registerDoctrineTypeMapping ('abc', 'abc'); –

+0

Debe estar en algún tipo de archivo de configuración bootstrap/db de la aplicación donde tenga acceso a 'DatabasePlatform'. – Crozin

9

En caso de que utilice BIT columna para almacenar un boolean, esto se hace:

// get currently used platform 
$dbPlatform = $em->getConnection()->getDatabasePlatform(); 

// interpret BIT as boolean 
$dbPlatform->registerDoctrineTypeMapping('bit', 'boolean'); 

Ahora, cada vez que mapea una propiedad a la columna de bits, doctrine 2 int erpret su valor como boolean.

26

Use mapping_types en el config.yml

doctrine: 
    dbal: 
     driver:%% database_driver 
     host:%% database_host 
     Port:%% database_port 
     dbname:% database_name% 
     user:%% database_user 
     password:%% database_password 
     charset: UTF8 
     mapping_types: 
      bit: boolean 
+0

Eso funcionó bien para mí :) – CBergau

+0

Puede funcionar como una solución rápida, pero el tipo 'bit' es algo más que un booleano. Así que ten cuidado, puedes perder algo de información allí. – romaricdrigon

Cuestiones relacionadas