laulamanapps/doctrine-enum

轻松创建 Doctrine 枚举类型

dev-master 2019-01-22 11:54 UTC

This package is auto-updated.

Last update: 2024-09-23 00:53:58 UTC


README

本包包含辅助类,用于使用 Doctrine 将枚举转换为数据库值。

安装

# composer require laulamanapps/doctrine-enum

用法

此处所述创建枚举。

# src/Enums/FooEnum.php

namespace YourAwesomeOrganisation\Enums;

use Werkspot\Enum\AbstractEnum;

/**
 * @method static FooEnum foo()
 * @method bool isFoo()
 * @method static FooEnum bar()
 * @method bool isBar()
 */
final class FooEnum extends AbstractEnum
{
    const FOO = 'foo';
    const BAR = 'bar';  
}

为该枚举创建特定的 doctrine 类型

# src/Doctrine/Persistence/Type/FooEnumType.php

namespace YourAwesomeOrganisation\Doctrine\Persistence\Type;

use YourAwesomeOrganisation\Enums\FooEnum;

final class FooEnumType extends AbstractOneOnOneEnumType
{
    protected function getEnumClass()
    {
        return FooEnum::class;
    }

    public function getName(): string
    {
        return 'enum_foo_type';
    }
}

将类型添加到 doctrine 配置

# config/packages/doctrine.yaml

doctrine:
    dbal:
        types:
            enum_foo_type: YourAwesomeOrganisation\Doctrine\Persistence\Type\FooEnumType

现在在您的实体中使用它

# src/Entity/MyData.php

use YourAwesomeOrganisation\Enums\FooEnum;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 */
class MyData
{
    /**
     * @var FooEnum
     *
     * @ORM\Column(type="enum_foo_type")
     */
    private $foo;
    
    public function setFoo(FooEnum $fooEnum): void
    {
        $this->foo = $fooEnum;
    }
    
    public function getFoo(): FooEnum
    {
        return $this->foo;
    }
}

现在 doctrine 将自动将 ENUM <=====> 数据库值