brandembassy / doctrine-enum-type
1.3.0
2024-02-15 07:19 UTC
Requires
- php: >=8.1
- doctrine/orm: ^2.14.3
Requires (Dev)
- brandembassy/coding-standard: ^11.2
- doctrine/annotations: ^2.0
- marc-mabe/php-enum: ^3.2 || ^4.4
- mockery/mockery: ^1.0
- myclabs/php-enum: ^1.6
- nette/neon: ^2.4
- phpunit/phpunit: ^10.5
- roave/security-advisories: dev-latest
- symfony/cache: ^5.4 || ^6.2
Suggests
- marc-mabe/php-enum: For marc-mabe/php-enum enums support
- myclabs/php-enum: For myclabs/php-enum enums support
This package is auto-updated.
Last update: 2024-09-16 14:28:48 UTC
README
Doctrine Enum 类型
此扩展使您在 Doctrine 实体中使用枚举变得简单。
为什么要使用枚举
- 您可以检查传递的值的类型
- 您可以说明哪些值是有效的
- 您可以为您的枚举类添加有用的方法
安装
composer require brandembassy/doctrine-enum-type
选择枚举库
目前支持三种枚举库
不用担心,您可以使用其他 Enum 实现,只需创建实现 BrandEmbassy\Doctrine\EnumType\EnumImplementation
接口的桥梁即可。
用法
设置 Doctrine
假设我们有一个颜色枚举
class Color extends Enum { public const BLACK = 'black'; public const WHITE = 'white'; public const RED = 'read'; public const GREEN = 'green'; public const BLUE = 'blue'; }
现在我们需要让 Doctrine 了解我们的枚举类。您可以使用 BrandEmbassy\Doctrine\EnumType\EnumTypesManager
来实现这一点
use BrandEmbassy\Doctrine\EnumType\Bridges\MarcMabeEnum\MarcMabeEnumBridge; use BrandEmbassy\Doctrine\EnumType\EnumTypesManager; $enumTypesManager = new EnumTypesManager(new MarcMabeEnumBridge()); $enumTypesManager->addEnumTypeDefinition('enumColor', Color::class); $enumTypesManager->initializeEnumTypes();
此初始化必须在处理实体或使用您的枚举的架构之前完成。
EnumTypesManager
的第一个参数是实现 BrandEmbassy\Doctrine\EnumType\EnumImplementation
的对象,该对象描述了您使用的枚举实现。
addEnumTypeDefinition
方法接受您想在实体中使用的枚举名称,第二个参数是您的枚举类。
开始在实体中使用枚举
我们已经准备好开始,现在我们可以定义使用颜色枚举的汽车实体
use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity * @ORM\Table(name="car") */ final class Car { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue * @var int */ private $id; /** * @ORM\Column(type="string") * @var string */ private $brand; /** * @ORM\Column(type="enumColor") * @var Color */ private $color; public function __construct(string $brand, Color $color) { $this->brand = $brand; $this->color = $color; } ... public function getColor(): Color { return $this->color; } public function setColor(Color $color): void { $this->color = $color; } } $user = new User('Skoda', Color::get(Color::GREEN));
内部
此库生成的数据库列类型为 VARCHAR(255)
。这给您的枚举带来了一个约束:枚举的值不能超过255个字符。