2012-01-05 11 views
29

Doctrine2'de ENUM yerine ne kullanıyorsunuz? smallint? Varchar kullanmayı düşündüm ya da açıkça char tanımladım, ancak bu indeksler konusunda çok etkili olmayabilir veya yanlış mıyım?Doctrine2'de ENUM yerine ne kullanıyorsunuz?

+0

Sana (resmi Doktrin belgelerine alınan) Bu yemek kitabı gerek: http://www.doctrine-project.org/docs /orm/2.1/en/cookbook/mysql-enums.html Tam olarak sizin probleminiz ve 2 çözüm sunuyor. Sadece seninkini seç. – Nanocom

cevap

57

Genellikle oldukça iyi çalışır ve bir IDE Numaralamalar diyeceğimiz ile çalışmak daha da kolay hale getirir

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

    protected $status = self::STATUS_ACTIVE; 
} 

gibi, sınıf sabitleri eşleştirilen tamsayılar ile çalışır.

Ayrıca, use an enumerable type as described by the documentation da yapabilirsiniz, ancak bu, enum sütunu başına bir özel tür tanımlamanız gerektiği anlamına gelir. Bu gerçek bir yararı olmayan çok iş.

Ayrıca why you shouldn't really use enums'u da bilmek isteyebilirsiniz.

+0

bir sorun - MyEntity dışındaki değerler ile uğraşırken, sabitleri yeniden kodlamak veya '0, 1, 2' kullanmak zorundasınız. i.e. '$ entity-> setStatus (STATUS_ACTIVE); // MyEntity ' – Dennis

+12

@ Dennis'in dışında çalışmazsa, kullanım '$ entity-> setStatus (MyEntity :: STATUS_ACTIVE);' – Ocramius

+0

Bu, MyEntity işlevini kullanan sınıfları belirli bir uygulamaya sıkı sıkıya bağlamaz mı? Bu sabitleri “MyEntityInterface” içinde tanımlamak daha iyi olur mu, “MyEntity” o zaman uygular? – Alex

3

Postgres symfony, bir şeklidir, doktrin ...

  1. postgres yeni tip enum tanımlayın (pgAdmin)

ENUM OLARAK TİP new_enum CREATE ('üzgün', 'tamam ', 'mutlu');

Varlık içinde
  • @ORM \ Sütun (isim = "name", type = "dizesini", columnDefinition = "new_enum", Nullable

      =) gerçek

      config.yml olarak

    mapping_types:
            new_enum: string

    # 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 # <======= 
    
    İlgili konular