Как включить ENUM в Symfony 2 / Doctrine - PullRequest
38 голосов
/ 29 ноября 2011

При запуске doctrine:mapping:import я получаю ошибку:

Запрошено неизвестное перечисление типа базы данных, Doctrine \ DBAL \ Platforms \ MySqlPlatform может не поддерживать его.

Кажется, мне нужно установить use_native_enum на true как-нибудь. Однако вся документация и сообщения в блоге относятся к Symfony <1.4. Есть ли какое-нибудь решение в Symfony 2? </p>

Ответы [ 2 ]

118 голосов
/ 17 октября 2012

Для проектов Symfony 2 добавьте это в конфигурацию dbal доктрины в app/config.yml:

doctrine:
    dbal:
        mapping_types: 
            enum:       string 

Моя полная конфигурация доктрины выглядит следующим образом:

# 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

Код адаптирован из здесь

Затем запустите:

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

0 голосов
/ 14 ноября 2014

Учитывая, что поваренная книга Doctrine дает только частичные ответы о том, как сделать перечисления интерпретируемыми как строки, следующее должно работать независимо от того, как настроен Doctrine.

Ошибка указывает на имя файла: Doctrine\DBAL\Platforms\MySqlPlatform .php - там вы увидите, что список по умолчанию встроен в функцию initializeDoctrineTypeMappings следующим образом:

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

Добавление поддержки простого перечисления для всех пользователей доктрины, независимо от остальныхнастройка просто достигается путем расширения списка с помощью:

'enum' => 'string'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...