Skip to content

🔠 Doctrine integration of ekvedaras/php-enum package

License

Notifications You must be signed in to change notification settings

ekvedaras/doctrine-enum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Doctrine Enum

Tests Code Coverage Software License Latest Version on Packagist Total Downloads

Twitter Follow

This package integrates ekvedaras/php-enum into Doctrine by providing custom enum mapping type.

Usage

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');
    }
}

Casting

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;

    // ...
}

Registering enum:

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,
]);