Как включить ENUM в Symfony 2/Doctrine
При запуске doctrine:mapping:import
я получаю сообщение об ошибке:
Неизвестное запрошенное перечисление типа базы данных, Doctrine\DBAL\Platforms\MySqlPlatform может не поддерживать его.
Кажется, мне нужно установить use_native_enum
в true
как-то. Тем не менее, все документы и сообщения в блогах ссылаются на Symfony < 1.4. Есть ли какие-нибудь решения в Symfony 2?
Ответы
Ответ 1
Для проектов Symfony 2 добавьте это в конфигурацию dbal doctrine в 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
Ответ 2
Учитывая, что кулинарная книга Doctrine дает лишь частичные ответы на вопрос о том, как сделать перечисления интерпретируемыми как строки, следующее должно работать независимо от того, как настроена Doctrine.
Ошибка указывает на имя файла: Doctrine\DBAL\Platforms\MySqlPlatform
.php - там вы увидите, что список по умолчанию встроен в функцию initializeDoctrineTypeMappings
следующим образом:
$this->doctrineTypeMapping = array(
'tinyint' => 'boolean',
'smallint' => 'smallint',
'mediumint' => 'integer',
'int' => 'integer',
(...)
Добавление простой поддержки перечисления для всех пользователей доктрины, независимо от остальной части настройки, просто достигается путем расширения списка:
'enum' => 'string'