2012-03-16 38 views
13

Tôi có một vài cột trong lược đồ cơ sở dữ liệu của tôi có các kiểu dữ liệu bit và đang gặp vấn đề với Doctrine2 ánh xạ nó. Tôi tiếp tục nhận được:Doctrine2 workaround cho ánh xạ MySql 'bit' kiểu dữ liệu

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

Có công việc nào không? Tôi đã nghĩ đến việc chỉ thay đổi kiểu dữ liệu thành boolean và chỉ sử dụng các câu lệnh true và false nhưng điều đó có nghĩa là thay đổi lược đồ trên một quy mô lớn mà tôi không có thời gian.

+0

[câu trả lời tương tự] (http://stackoverflow.com/a/12925885/495132) để kích hoạt ENUM –

+0

Bit muộn, nhưng thuyết khuyến tinyint với nhiều loại boolean với mysql (http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/types.html#mapping-matrix). Bạn có thể chuyển đổi các cột bit thành tinyint? – BigJ

Trả lời

5

Bạn có thể tạo loại tùy chỉnh của riêng bạn cho Doctrine.

  1. Tạo loại mới bằng cách mở rộng Doctrine\DBAL\Types\Type lớp.
  2. Ghi đè convertToPHPValue()convertToDatabaseValue() phương pháp.
  3. đăng ký một loại mới:

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

Tìm hiểu thêm về Học thuyết của documentation pages

+0

bạn có thể vui lòng đề nghị từ nơi tôi nên thực thi mã đó (từ dấu nhắc lệnh? Tôi đang trên cửa sổ): $ dbPlatform = $ em-> getConnection() -> getDatabasePlatform(); $ dbPlatform-> registerDoctrineTypeMapping ('abc', 'abc'); –

+0

Nó phải ở trong một số loại tệp cấu hình bootstrap/db của ứng dụng mà bạn có quyền truy cập vào 'DatabasePlatform'. – Crozin

9

Trong trường hợp bạn đang sử dụng BIT cột để lưu trữ một boolean, bạn làm như sau:

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

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

Bây giờ mỗi khi bạn ánh xạ thuộc tính vào cột bit, học thuyết 2 sẽ int erpret giá trị của nó như là một boolean.

26

Sử dụng mapping_types trong 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

Điều đó có tác dụng tốt đối với tôi :) – CBergau

+0

Nó có thể hoạt động như một sự sửa chữa nhanh chóng, nhưng kiểu 'bit' là cái gì đó khác với boolean. Vì vậy, xem ra bạn có thể mất một số thông tin đó. – romaricdrigon

Các vấn đề liên quan