2013-08-05 6 views
3

내 테이블 중 하나에서 ENUM 유형을 사용하고 있지만 Doctrine은 그다지 좋아하지 않습니다. 그래서 나는 내 연구를하고 이것에 대해 기본적으로 이야기하는이 topic을 발견했다. Doctrine 프로젝트의 other doc에서도 이와 관련하여 두 가지 가능성있는 솔루션에 대해 설명합니다. 이 코드가 가야 해야하는Symfony2와 Doctrine2에서 ENUM 유형을 정의하고 작동시키는 올바른 방법

  1. : 나는 첫 번째하지만를 사용합니다? 나는 그 값으로 SELECT를 표시 할 때

    $conn = $em->getConnection();
    $conn->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string');

  2. 어떻게 나중에 양식에서이 처리합니까? 내가 getPossibleEnumValues 같은 도우미를 추가하고 빌더에서 선택을 채우기 위해 이것을 사용하려는 형태의

    # app/config/config.yml 
    doctrine: 
        dbal: 
         connections: 
          default: 
           // Other connections parameters 
           mapping_types: 
            enum: string 
    

    : 당신은 당신의 설정에 다음 줄을 추가하기 위해 필요한이 doc에 관한

답변

4

$builder->add('enumField', 'choice', array(
    'choices' => $entity->getPossibleEnumValues(), 
)); 
+0

정보 주셔서 감사합니다. 하지만 FormBuilder에서 $ 엔티티에 액세스 할 수있는 방법은 무엇입니까? – neuromancer

+0

이렇게하려면 여러 가지 방법이 있습니다. 가장 깨끗한 것은이 답변과 같이'EventListener'를 사용하는 것일 수 있습니다 : http://stackoverflow.com/questions/11357748/symfony2-how-to-access-entity-values-inside-form – althaus

5
당신이 절대적으로 대신 항문와의 관계의 열거를 사용하려면

당신은하지만, (여러 가지 이유로 당신이 구글에서 또는 here에서 찾을 수) 열거 형을 사용해서는 안 가장 좋은 방법은 다음과 같은 열거 형 동작을 에뮬레이션하는 것입니다.

<?php 
/** @Entity */ 
class Article 
{ 
    const STATUS_VISIBLE = 'visible'; 
    const STATUS_INVISIBLE = 'invisible'; 

    /** @Column(type="string") */ 
    private $status; 

    public function setStatus($status) 
    { 
     if (!in_array($status, array(self::STATUS_VISIBLE, self::STATUS_INVISIBLE))) { 
      throw new \InvalidArgumentException("Invalid status"); 
     } 
     $this->status = $status; 
    } 
} 
+0

안녕하세요, Shady,이 말이 맞아요. 우리는 enum을 사용해서는 안됩니다.) Symfony를 사용할 때도 마찬가지입니까? –

+1

@Aleqxs : 실제로 ENUM을 사용하면 안됩니다 ... ENUM을 사용하여 사람이 읽을 수 있도록 돕기 위해 요일에 값을 저장하는 경우를 제외하고는 특별한 경우를 제외하고는 올바른 사용법입니다. 그러나 나는 위에서 설명한 것처럼 ENUM을 에뮬레이트하는 편이 더 좋습니다. – Shady

+0

이 스타일의 좋은 구현은 다음과 같습니다. http://www.maxpou.fr/dealing-with-enum-symfony-doctrine/ – davidbonachera