2012-03-16 3 views
13

Ho alcune colonne nello schema del mio database che hanno tipi di dati bit e sto riscontrando problemi con Doctrine2 che lo associa. Continuo a ricevere:Doctrine2 soluzione alternativa per mappare il tipo di dati 'bit' MySql

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

C'è qualche lavoro in giro? Stavo pensando di cambiare semplicemente il tipo di dati in booleano e di usare solo affermazioni vere e false, ma ciò significherebbe cambiare lo schema su larga scala per il quale non ho tempo.

+0

[risposta simile] (http://stackoverflow.com/a/12925885/495132) per consentire ENUM –

+0

po 'tardi, ma Dottrina raccomanda tinyint per i tipi booleani con mysql (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#mapping-matrix). Potresti convertire le colonne di bit in minuscole? – BigJ

risposta

5

È possibile creare il proprio tipo personalizzato per Doctrine.

  1. Creare un nuovo tipo estendendo la classe Doctrine\DBAL\Types\Type.
  2. Override convertToPHPValue() e convertToDatabaseValue() metodi.
  3. registrare un nuovo tipo:

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

saperne di più su di Doctrine documentation pages

+0

puoi suggerire da dove dovrei eseguire quel codice (dal prompt dei comandi? Sono su Windows): $ dbPlatform = $ em-> getConnection() -> getDatabasePlatform(); $ dbPlatform-> registerDoctrineTypeMapping ('abc', 'abc'); –

+0

Dovrebbe essere in un qualche tipo di file di configurazione bootstrap/db dell'applicazione dove si ha accesso a 'DatabasePlatform'. – Crozin

9

Nel caso in cui si utilizza BIT colonna per memorizzare un boolean, si esegue questa operazione:

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

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

Ora ogni volta che si mappa una proprietà in una colonna di bit, doctrine 2 sarà int erpretare il suo valore come un booleano.

26

Utilizzare mapping_types nel 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

Questo ha funzionato bene per me :) – CBergau

+0

Può funzionare come una soluzione rapida, ma il tipo 'bit' è qualcosa di diverso da un booleano. Quindi stai attento che potresti perdere alcune informazioni lì. – romaricdrigon