wakeapp/dbal-enum-type
最新稳定版本:v1.1.1
Composer 安装命令:
composer require wakeapp/dbal-enum-type
包简介
Provides basic functionality for working with ENUM type in the Doctrine
README 文档
README
Введение
Компонент предоставляет базовую функциональность для регистрации нового типа данных ENUM в Doctrine.
Таже поддерживается механизм doctrine:schema:update для ENUM'ов.
Важно: чтобы реализация поддержки ENUM'ов в команде doctrine:schema:update работала корректно
не указывайте движок базы данных:
- Работает корректно -
//user:pa$$word@host:3306/db_name - Работать не будет -
mysql://user:pa$$word@host:3306/db_name
Установка
Откройте консоль и, перейдя в директорию проекта, выполните следующую команду для загрузки наиболее подходящей стабильной версии этого компонента:
composer require wakeapp/dbal-enum-type
Эта команда подразумевает что Composer установлен и доступен глобально.
Пример использования
В качестве примера рассмотрим перечисление языков. Для начала нам необходимо создать класс со списком доступных языков:
<?php declare(strict_types=1); namespace App\AcmeBundle\Entity\Enum; class LanguageListEnum { public const RU = 'ru'; public const EN = 'en'; public const DE = 'de'; }
Для регистрации нашего перечисления как новый тип данных Doctrine необходимо создать еще один класс:
<?php declare(strict_types=1); namespace App\AcmeBundle\Doctrine\DBAL\Types; use App\AcmeBundle\Entity\Enum\LanguageListEnum; use Wakeapp\Component\DbalEnumType\Type\AbstractEnumType; class LanguageListEnumType extends AbstractEnumType { /** * {@inheritdoc} */ public static function getEnumClass(): string { return LanguageListEnum::class; } /** * {@inheritdoc} */ public static function getTypeName(): string { return 'language_list_enum'; } }
Создав необходимые классы остается только зарегистрировать их в Doctrine DBAL.
Для регистрации нового ENUM-типа воспользуйтесь официальной документацией Doctrine
Custom Mapping Types.
<?php declare(strict_types=1); \Doctrine\DBAL\Types\Type::addType(LanguageListEnumType::getTypeName(), LanguageListEnumType::class);
Если вы используете Symfony, то воспользуйтесь соответствующим разделом документации -
How to Use Doctrine DBAL.
Для начала необходимо зарегистрировать новый глобальный тип данных enum:
doctrine: dbal: mapping_types: enum: string
Далее необходимо установить доступный конкретный вид перечислений в виде списка языков.
Сделать это возможно двумя способами. Первый, классический, через добавление в конфигурационный файл Doctrine:
doctrine: dbal: types: # Где ключ это LanguageListEnumType::getTypeName() и значение LanguageListEnumType::class language_list_enum: App\AcmeBundle\Doctrine\DBAL\Types\LanguageListEnumType
Второй способ подойдет если вы используете отдельный бандл. Регистрация происходит через метод boot:
<?php declare(strict_types=1); namespace App\AcmeBundle; use App\AcmeBundle\Doctrine\DBAL\Types\LanguageListEnumType; use Doctrine\DBAL\Types\Type; use Symfony\Component\HttpKernel\Bundle\Bundle; class AppAcmeBundleBundle extends Bundle { public function boot() { Type::addType(LanguageListEnumType::getTypeName(), LanguageListEnumType::class); parent::boot(); } }
Дополнительно
Использование вместе с Symfony
В случае использования Symfony Framework необходимо зарегистрировать класс EnumEventSubscriber как сервис
с тегом doctrine.event_subscriber:
wakeapp.dbal_enum_type.event_subscriber.enum_event: tags: - { name: doctrine.event_subscriber, connection: default }
А также указать driver_class в конфигурации doctrine/doctrine-bundle:
doctrine: dbal: driver_class: Wakeapp\Component\DbalEnumType\Driver\PDOMySql\EnumAwareDriver
Переопределение значений Enum
При необходимости переопределить список значений enum,
определенных на основе констант класса из метода getEnumClass вы можете вызвать метод setValues.
Лицензия
统计信息
- 总下载量: 16.57k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 0
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2019-05-15