Как включить ENUM в Symfony 2 / Doctrine

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

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

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

2 ответа

Для проектов 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

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

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

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

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

'enum' => 'string'
Другие вопросы по тегам