Как включить 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'