ekvedaras/doctrine-enum

为 ekvedaras/php-enum 提供Doctrine集成的枚举映射类型

v1.0.0 2020-12-30 14:12 UTC

This package is auto-updated.

Last update: 2024-08-29 05:37:18 UTC


README

Tests Code Coverage Software License Latest Version on Packagist Total Downloads

Twitter Follow

本软件包通过提供自定义枚举映射类型,将 ekvedaras/php-enum 集成到 Doctrine 中。

用法

PaymentStatus.php

namespace App\Enums;

use EKvedaras\Doctrine\Enum;

class PaymentStatus extends Enum
{
    /**
     * @return static
     */
    final public static function pending(): self
    {
        return static::get('pending', 'Payment is pending');
    }

    /**
     * @return static
     */
    final public static function completed(): self
    {
        return static::get('completed', 'Payment has been processed');
    }

    /**
     * @return static
     */
    final public static function failed(): self
    {
        return static::get('failed', 'Payment has failed');
    }
}

UserStatus.php

namespace App\Enums;

use EKvedaras\Doctrine\Enum;

class UserStatus extends Enum
{
    /**
     * @return static
     */
    final public static function active(): self
    {
        return static::get(1, 'User is active');
    }

    /**
     * @return static
     */
    final public static function banned(): self
    {
        return static::get(2, 'User is banned');
    }

    /**
     * @return static
     */
    final public static function deactivated(): self
    {
        return static::get(3, 'User account is deactivated');
    }
}

映射

Payment.php

use App\Enums\PaymentStatus;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 * @ORM\Table(name="payments")
 */
class Payment
{
    // ...
   
    /**
     * @var PaymentStatus
     *
     * @ORM\Column(type=PaymentStatus::class)
     */
    protected $status;

    // ...
}

User.php

use App\Enums\UserStatus;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 * @ORM\Table(name="users")
 */
class User
{
    // ...
   
    /**
     * @var UserStatus
     *
     * @ORM\Column(type="user-status")
     */
    protected $status;

    // ...
}

注册枚举

use App\Enums\PaymentStatus;
use App\Enums\UserStatus;
use EKvedaras\DoctrineEnum\EnumType;

// As class name
EnumType::register(PaymentStatus::class);
EnumType::register('user-status', UserStatus::class);

// Or multiple at once
EnumType::register([
    PaymentStatus::class,
    'user-status' => UserStatus::class,
]);