jdecool/enum-doctrine

此包已被废弃且不再维护。未建议替代包。

枚举对象的Doctrine

1.1.0 2020-12-08 21:40 UTC

This package is auto-updated.

Last update: 2022-02-24 20:21:18 UTC


README

Build Status Latest Stable Version

此包提供了一个基础实现,用于定义映射到 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\TypeJDecool\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