2011-11-29 32 views
34

Khi chạy doctrine:mapping:import tôi nhận được một lỗi:Cách bật enums trong Symfony 2/Học thuyết

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

Có vẻ như tôi cần phải đặt use_native_enum để true một số cách. Tuy nhiên, tất cả tài liệu và bài đăng trên blog đều đề cập đến Symfony < 1.4. Có giải pháp nào trong Symfony 2 không?

+0

Tôi nghĩ bạn sẽ tìm thấy câu trả lời cho câu hỏi của mình trong [MySQL Enums] (http: // www.doctrine-project.org/docs/orm/2.1/en/cookbook/mysql-enums.html) sách dạy nấu ăn chú. –

+0

Một chút trễ nhưng tôi nghĩ câu trả lời của tôi phù hợp với bạn @umpirsky – PutzKipa

+1

Nhưng phải đặt mã này ở đâu để nó chạy khi 'doctrine: mapping: import' được bắt đầu? – umpirsky

Trả lời

108

Đối Symfony 2 dự án, thêm video này vào cấu hình DBAL học thuyết trong app/config.yml:

doctrine: 
    dbal: 
     mapping_types: 
      enum:  string 

đầy đủ học thuyết cấu hình của tôi trông như thế này:

# Doctrine Configuration 
doctrine: 
    dbal: 
     driver: %database_driver% 
     host:  %database_host% 
     port:  %database_port% 
     dbname: %database_name% 
     user:  %database_user% 
     password: %database_password% 
     charset: UTF8 
     mapping_types: 
      enum: string 
      set: string 
      varbinary: string 
      tinyblob: text 

    orm: 
     auto_generate_proxy_classes: %kernel.debug% 
     auto_mapping: true 

Mã chuyển thể từ here

Sau đó, chạy:

app/console doctrine:schema:update --force --dump-sql --ansi

+5

có điều này hoạt động nhưng vấn đề tôi đoán là nó xóa tất cả các loại enum từ cơ sở dữ liệu khi bạn làm một "php app/giao diện điều khiển: schema: update --force" – mahen3d

0

Xem sách giáo khoa Doctrine chỉ cung cấp câu trả lời một phần về cách làm cho enums diễn giải dưới dạng chuỗi, sau đây sẽ hoạt động bất kể Doctrine được cấu hình như thế nào.

Các lỗi chỉ bạn vào tên của tập tin: Doctrine\DBAL\Platforms\MySqlPlatform .php - trong đó, bạn sẽ thấy rằng danh sách mặc định được nhúng vào trong hàm initializeDoctrineTypeMappings như sau:

$this->doctrineTypeMapping = array(
      'tinyint'  => 'boolean', 
      'smallint'  => 'smallint', 
      'mediumint'  => 'integer', 
      'int'   => 'integer', 
      (...) 

Thêm hỗ trợ enum đơn giản cho tất cả người dùng học thuyết, bất kể phần còn lại của thiết lập, chỉ đơn giản là đạt được bằng cách mở rộng danh sách với:

'enum' => 'string'