An open API service indexing awesome lists of open source software.

https://github.com/heymoon-cc/doctrine-psql-enum

Doctrine migrations for PostgreSQL enum
https://github.com/heymoon-cc/doctrine-psql-enum

doctrine-orm postgresql

Last synced: about 1 month ago
JSON representation

Doctrine migrations for PostgreSQL enum

Awesome Lists containing this project

README

          

# Doctrine enums for PostgreSQL
[![Version](https://poser.pugx.org/heymoon/doctrine-psql-enum/v)](https://packagist.org/packages/heymoon/doctrine-psql-enum)
[![PHP Version Require](https://poser.pugx.org/heymoon/doctrine-psql-enum/require/php)](https://packagist.org/packages/heymoon/doctrine-psql-enum)
[![Test](https://github.com/heymoon-cc/doctrine-psql-enum/actions/workflows/test.yaml/badge.svg)](https://github.com/heymoon-cc/doctrine-psql-enum/actions/workflows/test.yaml)
[![Maintainability](https://qlty.sh/badges/86677899-9f9f-40c8-95c7-b1200e029944/maintainability.svg)](https://qlty.sh/gh/heymoon-cc/projects/doctrine-psql-enum)
[![Code Coverage](https://qlty.sh/badges/86677899-9f9f-40c8-95c7-b1200e029944/test_coverage.svg)](https://qlty.sh/gh/heymoon-cc/projects/doctrine-psql-enum)
[![Matrix](https://img.shields.io/matrix/doctrine-psql-enum%3Aheymoon.cc?fetchMode=guest)](https://matrix.to/#/#doctrine-psql-enum:heymoon.cc)
## Prerequisites: *Symfony 7 + Doctrine 3*

### Installation
`composer require heymoon/doctrine-psql-enum`

### Usage
Create library configuration:

`config/packages/doctrine_postgres_enum.yaml`
```yaml
doctrine_postgres_enum:
type_name: enum
migrations:
enabled: true
comment_tag: DC2Enum
```
For defining new enum type, [use native PHP enums](https://www.php.net/manual/language.types.enumerations.php):
```php
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:
```php
#[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:
```php
$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))');
```