ufo-tech/doctrine-helper

一套针对 Doctrine 的现成解决方案(特质、接口、类),可帮助您摆脱日常繁琐,加快开发速度

1.0.0 2024-06-10 10:56 UTC

This package is auto-updated.

Last update: 2024-09-10 11:33:08 UTC


README

一套针对 Doctrine 的现成解决方案(特质、接口、类),可帮助您摆脱日常繁琐,加快开发速度

文档

使用 PHP 枚举类型为 MySQL 枚举类型

1. 为实体字段创建枚举案例

<?php
namespace App;

enum MyEnum: string
{
    case CASE_1 = 'My case 1';
    case CASE_2 = 'My case 2';
}

2. 创建 DBAL 类并扩展 Ufo\DoctrineHelper\DBAL\AbstractEnumType

<?php
namespace App\DBAL;

use BackedEnum;
use App\MyEnum;

class MyEnumType extends AbstractEnumType
{
    protected string|BackedEnum $enum = MyEnum::class;
}

3. 在 DBAL 中注册新类型

doctrine:
    dbal:
        types:
            App\MyEnum: 'App\DBAL\MyEnumType'

4. 使用 PHP 枚举类型设置和更改值

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity]
#[ORM\Table(name: 'demo')]
class Demo
{
    #[ORM\Column(type: MyEnum::class, nullable: false)]
    protected string $case;


    public function __construct(MyEnum $case)
    {
        $this->case = $case->value;
    }

    public function changeCase(MyEnum $case): void
    {
        $this->type = $case->value;
    }

    public function getCase(): string
    {
        return $this->case;
    }

}