jdecool / enum-doctrine
此包已被废弃且不再维护。未建议替代包。
枚举对象的Doctrine
1.1.0
2020-12-08 21:40 UTC
Requires
- php: ^8.0
- doctrine/dbal: ^3.0
- jdecool/enum: ^1.0
Requires (Dev)
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.5
- vimeo/psalm: ^4.3
README
此包提供了一个基础实现,用于定义映射到 JDecool\Enum\Enum
对象(jdecool/enum
包)的 doctrine 实体列类型。
这是从 acelaya/doctrine-enum-type
的迁移。
已废弃
⚠️ 此项目不再积极维护。
原生的枚举从PHP 8.1版本开始加入: https://php.ac.cn/enumerations 如果你的项目正在运行PHP 8.1+ 或你的库将其作为最低要求,你应该使用它而不是这个库。
安装
使用 Composer 安装
composer require jdecool/enum-doctrine
使用方法
此包提供了一个扩展自 Doctrine\DBAL\Types\Type
的 JDecool\Enum\Doctrine\EnumType
类。你可以用它来轻松地将类型名称映射到具体的枚举。
EnumType
类将用作枚举属性的 doctrine 类型。
use JDecool\Enum\Enum; class MyEnum extends Enum { public const ENUM_1 = 'value_1'; protected const ENUM_2 = 'value_2'; private const ENUM_3 = 'value_3'; }
然后,你可以将枚举映射到你的实体。
class User { // ... /** * @var MyEnum * * @ORM\Column(type=MyEnum::class, length=10) */ protected $action; // ... }
属性的列类型是 MyEnum
枚举的 FQCN。为了使其工作,你必须使用 JDecool\Enum\Doctrine\EnumType::registerEnumType
静态方法注册具体的列类型。
// in bootstrapping code use JDecool\Enum\Doctrine\EnumType; EnumType::registerEnumType(MyEnum::class); // Don't forget to register the enums for schema operations $platform = $em->getConnection()->getDatabasePlatform(); $platform->registerDoctrineTypeMapping('VARCHAR', MyEnum::class);
或者你也可以使用 JDecool\Enum\Doctrine\EnumType::registerEnumTypes
,它期望一个要注册的枚举数组。
// ... use JDecool\Enum\Doctrine\EnumType; EnumType::registerEnumTypes([ MyEnum::class, 'php_enum_type' => MyEnum::class, ]);
如果你使用 Doctrine 与 Symfony
# config/packages/doctrine.yaml doctrine: dbal: types: uuid: JDecool\Enum\Doctrine\EnumType