2011-11-05 2 views
0

기본 키의 중복을 막기 위해 심포니 폼에 유효성 검사기를 설치했습니다.sfValidatorDoctrineUnique 대문자로 실패했습니다

이 경우 기본 키는 2 자 문자열입니다. 유효성을 검사하는 데 사용 된 코드 :

$this->mergePostValidator(new sfValidatorDoctrineUnique(array(
    'model' => 'Manufacturers', 
    'column' => 'id', 
    'primary_key' => 'id' 
))); 

기본 키는 대문자입니다 (예 : AU). 엽서 유효성 검사기가 성공적으로 트리거하는 소문자 'au'가 필드에 입력됩니다 (즉, 데이터베이스로 이동하여 500 무결성 제약 조건 오류가 발생하는 것을 막음). 'AU'로 올바르게 입력하면 복사.

의견이 있으십니까?

+0

정말 질문을 이해하지 마십시오. "sfValidatorDoctrineUnique()가 대소 문자를 구분합니까?" 데이터베이스는 대소 문자를 구분할 수 있기 때문에 대답은 "예"입니다. –

+0

@Blowski : 나는 OP가 코드가 정확히 동일하지 않을 때 ('au' 대'AU') 제약 조건이 발생한다고 말하고 있지만 정확히 같은 경우 ('AU' 대 'AU')는 그렇지 않습니다. 참으로 그렇습니다. – greg0ire

+0

id 열에 어떤 조합을 사용하고 있습니까? –

답변

3

심포니 sfDoctrineValidator 문제가 아닙니다. 이 모든 유효성 검사기는 데이터베이스에서 기존 레코드를 검색하는 것입니다. "_ci"(대소 문자를 구별하지 않는) 데이터 정렬을 사용하는 경우 (mysql을 사용하고 있습니까?) 검색 결과는 아무 것도 반환하지 않습니다. 즉, 유효성 검사기는 바보입니다.

그런 다음 복제본을 삽입하면 데이터베이스에서 예외가 발생합니다. 같은 테이블의 데이터 정렬을 변경하려고 :

ALTER TABLE `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin 

(당신은 당신을 위해 그것을 할 교리를 말해야한다 :

MyTable: 
    options: { collate: utf8_bin, charset: utf8 } 

)