2012-03-16 13 views
13

मेरे डेटाबेस स्कीमा में कुछ कॉलम हैं जिनमें बिट डेटा प्रकार हैं और इसमें Doctrine2 मैपिंग के साथ समस्याएं हैं। मैं मिल रहा हूं:MySQL 'बिट' डेटा प्रकार मैपिंग के लिए Doctrine2 वर्कअराउंड

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

क्या कोई काम आसपास है? मैं केवल डेटा प्रकार को बूलियन में बदलने की सोच रहा था और केवल सच्चे और झूठे वक्तव्यों का उपयोग करता हूं, लेकिन इसका अर्थ यह होगा कि स्कीमा को बड़े पैमाने पर बदलना है जिसके लिए मेरे पास समय नहीं है।

+0

[समान जवाब] (http://stackoverflow.com/a/12925885/495132) –

+0

थोड़ी देर हो चुकी Enum सक्षम करने के लिए है, लेकिन सिद्धांत बूलियन प्रकार के लिए सिफारिश की गई है tinyint mysql के साथ (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#mapping-matrix)। आप बिट कॉलम को टिनिंट में बदल सकते हैं? – BigJ

उत्तर

5

आप सिद्धांत के लिए अपना खुद का, कस्टम प्रकार बना सकते हैं।

  1. Doctrine\DBAL\Types\Type कक्षा को बढ़ाकर एक नया प्रकार बनाएं।
  2. convertToPHPValue() और convertToDatabaseValue() विधियों को ओवरराइड करें।
  3. एक नए प्रकार के रजिस्टर:

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

बारे में अधिक पढ़ें सिद्धांत के documentation pages

+0

क्या आप कृपया सुझाव दे सकते हैं कि मुझे उस कोड को निष्पादित करना चाहिए (कमांड प्रॉम्प्ट से? मैं विंडोज़ पर हूं): $ dbPlatform = $ em-> getConnection() -> getDatabasePlatform(); $ dbPlatform-> रजिस्टर डॉक्ट्रिन टाइप टाइपिंग ('एबीसी', 'एबीसी'); –

+0

यह किसी प्रकार के एप्लिकेशन के बूटस्ट्रैप/डीबी कॉन्फ़िगरेशन फ़ाइल में होना चाहिए जहां आपके पास 'डेटाबेसप्लाफ़्ट' तक पहुंच है। – Crozin

9

मामले में आप BIT स्तंभ का उपयोग कर रहे एक boolean स्टोर करने के लिए, आप यह करते हैं:

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

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

अब जब भी आप बिट कॉलम में किसी संपत्ति को मैप करते हैं, तो सिद्धांत 2 int एक बूलियन के रूप में इसके मूल्य को समझें।

26

config.yml में उपयोग 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

यह मेरे लिए ठीक काम करता है :) – CBergau

+0

यह एक त्वरित फिक्स के रूप में काम कर सकता है, लेकिन 'बिट' प्रकार एक बूलियन से कुछ और है। तो देखो कि आप वहां कुछ जानकारी खो सकते हैं। – romaricdrigon