Skip to content

Instantly share code, notes, and snippets.

@osavchenko
Created October 1, 2021 14:26
Show Gist options
  • Save osavchenko/1f1f471b4c33e9839170454f759de3be to your computer and use it in GitHub Desktop.
Save osavchenko/1f1f471b4c33e9839170454f759de3be to your computer and use it in GitHub Desktop.

acelaya/doctrine-enum-type Symfony setup guide

Setup

Create enum

<?php

namespace App\Enum;

use MyCLabs\Enum\Enum;

/**
 * @method static LetterEnum A()
 * @method static LetterEnum B()
 */
final class LetterEnum extends Enum
{
    public const A = 'a';
    public const B = 'b';
}

Create custom doctrine type class

<?php

namespace App\Doctrine\Type;

use Acelaya\Doctrine\Type\PhpEnumType;
use App\Enum\LetterEnum;

final class LetterEnumType extends PhpEnumType
{
    protected string $enumClass = LetterEnum::class;

    public function getName(): string
    {
        return LetterEnum::class;
    }
}

Register enum as a custom doctrine type

# config/packages/doctrine.yaml
doctrine:
    dbal:
        types:
            App\Enum\LetterEnum: App\Doctrine\Type\LetterEnumType

Usage

<?php

namespace App\Entity;

use App\Enum\LetterEnum;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity()
 */
class Alphabet
{
    /**
     * @ORM\Column(type=LetterEnum::class)
     */
    private LetterEnum $letter;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment