2012-03-16 22 views
13

Veritabanı veri şemasında, bit veri türlerine sahip ve Doctrine2 ile sorun yaşamaya çalışan bir kaç sütun var. Devam ediyorum:Doctrine2 MySql 'bit' veri türü eşlemesi için geçici çözüm

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

Etrafta bir iş var mı? Veri türünü yalnızca boolean olarak değiştirmeyi düşünüyordum ve sadece doğru ve yanlış ifadeleri kullanıyorum ama bu, şemayı büyük bir ölçekte değiştirmem anlamına geliyor.

+0

[benzer cevap] (http://stackoverflow.com/a/12925885/495132) –

+0

biraz geç kaldın enum etkin kılmak ama Doktrini boolean türleri için tinyint önerir mysql ile (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#mapping-matrix). Bit sütunlarını tinyint'e dönüştürebilir misin? – BigJ

cevap

5

Doktrin için kendi özel tipinizi oluşturabilirsiniz.

  1. Doctrine\DBAL\Types\Type sınıfını genişleterek yeni bir tür oluşturun.
  2. convertToPHPValue() ve convertToDatabaseValue() yöntemlerini geçersiz kılın.
  3. yeni bir tür Kayıt: Daha fazla okuyun

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

Doktrini Diyelim ki bir boolean depolamak için BIT sütunu kullanan documentation pages durumda

+0

Lütfen bu kodu nerede çalıştırmam gerektiğini önerebilir misiniz (komut isteminde? Pencerelerdeyim): $ dbPlatform = $ em-> getConnection() -> getDatabasePlatform(); $ dbPlatform-> registerDoctrineTypeMapping ('abc', 'abc'); –

+0

"DatabasePlatform" öğesine erişebileceğiniz bir uygulamanın bootstrap/db yapılandırma dosyasında olması gerekir. – Crozin

9

, bunu:

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

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

Artık bir özelliği bit sütununa eşlediğiniz her zaman, doctrine 2 int değerini bir boolean olarak eritin. config.yml içinde

26

Kullanım mapping_types

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

Bu benim için iyi çalıştı :) – CBergau

+0

Hızlı bir düzeltme olarak çalışabilir, ancak 'bit' türü bir booleandan başka bir şeydir. Bu yüzden bazı bilgileri burada kaybedebileceğine dikkat edin. – romaricdrigon

İlgili konular