web-dev-qa-db-fra.com

Qu'utilisez-vous à la place d'ENUM dans doctrine2?

Qu'utilisez-vous à la place d'ENUM dans Doctrine2? smallint? J'ai pensé à utiliser varchar, ou à définir explicitement char, mais cela peut ne pas être très efficace en ce qui concerne les index, ou je me trompe?

36
DavidW

Je travaille généralement avec des entiers mappés à des constantes de classe, comme

class MyEntity {
    const STATUS_INACTIVE = 0;
    const STATUS_ACTIVE = 1;
    const STATUS_REFUSE = 2;

    protected $status = self::STATUS_ACTIVE;
}

Cela fonctionne très bien et rend encore plus facile de travailler avec ce que vous appelleriez ENUMS dans un IDE.

Vous pouvez également tiliser un type énumérable comme décrit dans la documentation , mais cela signifie que vous devrez définir un type personnalisé par colonne d'énumération. C'est beaucoup de travail sans réel avantage.

Vous pouvez également vouloir savoir pourquoi vous ne devriez pas vraiment utiliser les énumérations .

67
Ocramius

Postgres, symfony, orm, doctrine ...

  1. Postgress Définir un nouveau type d'énumération (pgAdmin)

CREATE TYPE new_enum AS ENUM ('triste', 'ok', 'heureux');

  1. Dans l'entité

@ORM\Column (name = "name", type = "string", columnDefinition = "new_enum", nullable = true)

  1. Dans config.yml

mapping_types:
Nouveau_enum: chaîne

# Doctrine Configuration
doctrine:
    dbal:
        driver:   "%database_driver%"
        Host:     "%database_Host%"
        port:     "%database_port%"
        dbname:   "%database_name%"
        user:     "%database_user%"
        password: "%database_password%"
        charset:  UTF8
        mapping_types:
            new_enum: string # <=======
8
websky