2012-04-12 6 views
4

두 필드의 "고유성"을 검증하는 데 문제가 있습니다. 두 필드 중 하나가 연결 엔티티 중 하나입니다. 논리는 하나의 국가에 대해 동일한 설명이있는 두 가지 세금이있을 수 없다는 것입니다.symfony 2 고유 한 제약 조건 확인 (연결 포함)

은 여기 내 (실패) 시도의 :

/** 
* @ORM\Entity 
* @ORM\Table(name="taxes", uniqueConstraints={@ORM\UniqueConstraint(columns={"country_id", "description"})}) 
* @UniqueEntity(fields={"country", "description"}) 
*/ 

class Tax 
{ 
    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column()   
    */ 
    protected $description; 

    /** 
    * @ORM\Column(type="float") 
    */ 
    protected $value; 

    /** 
    * @ORM\ManyToOne(targetEntity="Country", inversedBy="taxes") 
    */ 
    protected $country; 

    //getters and setters... 
} 

내가 중복 세무 법인 내 응용 프로그램을 테스트

이 양식 (말아야 때) 검증을 통과 심포니 오류가 발생합니다 :

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-ITBMS' for key 'country_id' 

업데이트 : : Doctrine 2.2에서 수정 된 Doctrine 2.1의 알려진 bug입니다. 파일을 내 deps를 업데이트하고 deps.lock 후 최신 얻을 : 불행하게도, 심포니 2.0.11 (내 현재 버전) 교리 2.1과 함께 제공 내가 적절하게

가 업데이트 2 내 deps 파일을 업데이트하는 방법을 모른다 교리 2.2.1 파일 @elnur 아래에 제안 된대로 문제가 여전히 있습니다 : 복합 고유 키가 데이터베이스에서 만들어 지지만 유효성 검사가 올바르게 수행되지 않습니다. Doctrine 파일 만 업그레이드하면 문제가 해결되지 않습니다.

업데이트 3 : Symfony 코어를 버전 2.0.12로 업데이트 했는데도 문제가 해결되지 않습니다.

업데이트 4 (SOLVED) : 컨트롤러에서 오류가 발견되었습니다.

public function createAction($country_id) 
{ 
    //...   

    if($request->getMethod() == 'POST') 
    { 
     $form->bindRequest($request); 
     $tax->setCountry($country); //HERE IS THE ERROR... 

     if($form->isValid()) 
     { 
      //... 
     } 
    }   
    //... 
} 

솔루션을 요청을 한 바인딩 전에 국가 설정 : 여기에 내 원래의 컨트롤러 코드입니다.

public function createAction($country_id) 
{ 
    //...   

    if($request->getMethod() == 'POST') 
    {    
     $tax->setCountry($country); //NOW IT WORKS... 
     $form->bindRequest($request);    

     if($form->isValid()) 
     { 
      //... 
     } 
    }   
    //... 
} 
+0

'{@ORM \ UniqueConstraint (열 = { "pais_id"를 대체, "descripcion"})})'여기에 오타를 만들지 않았습니까? – meze

+0

네가 맞긴하지만 그게 바로 StackOverflow (내가 테스트하고있는 실제 코드가 아님)에 오타가 있었던 이유이다. 질문을 수정하려고합니다. Thanks –

+0

업데이트 4에 대해 더 자세히 설명해 주시겠습니까? – Tjorriemorrie

답변

관련 문제