heymoon / doctrine-psql-enum
Store PHP native enums as PostgeSQL custom enum types
Installs: 57
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 1
Forks: 0
Open Issues: 1
Type:symfony-bundle
Requires
- php: >=8.2
- doctrine/doctrine-bundle: 2.*
- doctrine/orm: 3.*
- symfony/framework-bundle: 7.*
Requires (Dev)
- doctrine/doctrine-migrations-bundle: 3.*
- phpunit/phpunit: ^9.5
- symfony/orm-pack: 2.*
- symfony/yaml: 7.*
README
Prerequisites: Symfony 7 + Doctrine 3
Installation
composer require heymoon/doctrine-psql-enum
Usage
Create library configuration:
config/packages/doctrine_postgres_enum.yaml
doctrine_postgres_enum: type_name: enum migrations: enabled: true comment_tag: DC2Enum
For defining new enum type, use native PHP enums:
use HeyMoon\DoctrinePostgresEnum\Attribute\EnumType; #[EnumType('auth_status')] enum AuthStatus: string { case New = 'new'; case Active = 'active'; case Inactive = 'inactive'; case Deleted = 'deleted'; } #[EnumType('auth_service')] enum Service: string { case Google = 'google'; }
For creation of enum-field in model, use enum
as type
value, enumType
in Column
attribute must be defined:
#[ORM\Entity(repositoryClass: AuthRepository::class)] class Auth { #[ORM\Id] #[ORM\GeneratedValue(strategy: "CUSTOM")] #[ORM\CustomIdGenerator(class: "doctrine.uuid_generator")] #[ORM\Column(type: 'uuid')] private Uuid $id; #[ORM\Column(type: 'enum', enumType: AuthStatus::class)] private AuthStatus $status; #[ORM\Column(type: 'enum', enumType: Service::class)] private Service $service; }
Create migrations via make:migration
. If enum was created or modified, the CREATE TYPE
/ALTER TYPE
calls would be added to migration. Example:
$this->addSql('DROP TYPE IF EXISTS auth_status'); $this->addSql('CREATE TYPE auth_status AS ENUM (\'new\',\'active\',\'inactive\',\'deleted\')'); $this->addSql('DROP TYPE IF EXISTS auth_service'); $this->addSql('CREATE TYPE auth_service AS ENUM (\'google\')'); $this->addSql('CREATE TABLE auth (id UUID NOT NULL, status auth_status NOT NULL, service auth_service NOT NULL, PRIMARY KEY(id))');