vkollin / doctrine-backed-enum-fields-bundle
通过生成枚举字段而不是字符串字段,真正支持Doctrine中的后端枚举。
1.4.1
2024-05-02 12:16 UTC
Requires
- php: >=8.1
- doctrine/dbal: ^3.0 || ^4.0
- doctrine/orm: ^2.0 || ^3.0
Requires (Dev)
- symfony/config: ~6.0 || ^7.0
- symfony/dependency-injection: ~6.0 || ^7.0
- symfony/http-kernel: ~6.0 || ^7.0
README
此库为您的Doctrine实体提供对PHP 8.1中引入的枚举的支持,并将为您生成枚举字段。
Doctrine引入了某种枚举支持,但这只会给您字符串字段。
感谢
本项目由bpolaszek/doctrine-native-enums由 Beno!t POLASZEK分叉,并深受此博客文章的启发。
安装
composer require vkollin/doctrine-backed-enum-fields-bundle
使用
此库仅适用于后端枚举。
在Symfony项目中
1. 声明该包。
// config/bundles.php return [ // ... VKollin\Doctrine\BackedEnumFields\Bundle\DoctrineBackedEnumFieldsBundle::class => ['all' => true], ];
2. 在配置中注册枚举。
# config/packages/doctrine_backed_enum_fields.yaml doctrine_backed_enum_fields: enum_types: App\Entity\StatusEnum: ~ #App\Entity\StatusEnum: status # Alternatively, if you want your type to be named "status"
3. 在实体中使用它们。
declare(strict_types=1); namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] final class Book { #[ ORM\Id, ORM\Column(unique: true), ORM\GeneratedValue(strategy: 'AUTO'), ] public int $id; #[ORM\Column] public string $name; #[ORM\Column(type: StatusEnum::class)] public StatusEnum $status; }
键中的枚举
您需要使用自定义id生成器来使用枚举作为键。还需要将GeneratedValue策略设置为CUSTOM。否则,自定义id生成器将不会被使用。但这里不会生成任何内容。
#[ORM\Column(name: 'type', type: StatusEnum::class, nullable: false)] #[ORM\GeneratedValue(strategy: 'CUSTOM')] #[ORM\CustomIdGenerator(EnumIdGenerator::class)] #[ORM\Id] private StatusEnum $status,
然后您还需要在services.yaml中将自定义id生成器标记为doctrine id_generator
VKollin\Doctrine\BackedEnumFields\IdGenerator\EnumIdGenerator: class: VKollin\Doctrine\BackedEnumFields\IdGenerator\EnumIdGenerator tags: [ 'doctrine.id_generator' ]
在其他使用Doctrine的项目中
use App\Entity\StatusEnum; use BenTools\Doctrine\NativeEnums\Type\NativeEnum; use Doctrine\DBAL\Types\Type; NativeEnum::registerEnumType(StatusEnum::class); // NativeEnum::registerEnumType('status', StatusEnum::class); // Alternatively, if you want your type to be named "status"
许可证
MIT。
Ceterum censeo Doctrinam esse delendam