2013-01-02 2 views
0

Symfony가 전자 메일 필드를 고유 한 것으로 표시하지 않습니다. validation.yml에서 설정할 수 있지만 좋은 방법은 아닙니다. 심포니가 전자 메일 필드를 고유하게 표시하지 않는 이유는 누구나 알 수 있습니까? 나는 기존의 DB에서 엔티티를 생성하는 실행symfony 생성 엔티티가 누락되었습니다.

내 명령 :

php app/console doctrine:mapping:convert xml ./src/Frontend/AccountBundle/Resources/config/doctrine/metadata/orm --from-database --force 
php app/console doctrine:mapping:import FrontendAccountBundle annotation 
php app/console doctrine:generate:entities FrontendAccountBundle 

내 테이블 :

CREATE TABLE `user` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `email` (`email`), 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=22 ; 

에서 설정 /...../ User.orm.xml :

<field name="email" type="string" column="email" length="255" nullable="false"/> 

법인/User.php에서

/** 
* @var string 
* 
* @ORM\Column(name="email", type="string", length=255, nullable=false) 
*/ 
private $email; 
+0

전자 메일 필드는 항상 고유해야합니다. 그것은 당신 한테 달려 있어요. –

+0

고마워,하지만 SQL에서 그것은 단지 varchar 255입니다. 내가 명령을 할 때 그것을 덮어 쓰게되기 때문에 User.php에서도이 필드를 고유하게 입력하는 것은 이해가되지 않습니다. 첫 번째 대답에 대한 내 명령을 살펴보십시오. – craphunter

+0

필요한 필드를 고유 한 것으로 설명하기 위해'uniqueConstraint'를 사용하십시오. 자세한 내용은 http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html#uniqueconstraint 링크를 참조하십시오. –

답변

2
@ORM\Column(name="email", type="string", unique=true, length=255, nullable=false) 
             ^^^^^^^^^^^ 

참조 :

http://docs.doctrine-project.org/en/2.0.x/reference/annotations-reference.html

+0

예, Entity/User.php & User.php는 세 가지 명령으로 생성됩니다. 심포니가이 명령으로 unique = true를 생성하지 않는 이유는 무엇입니까? 내 sql 파일에 문제가 있습니까? – craphunter

+0

Doctrine의 데이터베이스 변환은 항상 신뢰할 수있는 것은 아니며 다양한 데이터베이스가 고유 한 제약 조건을 구현할 수있는 방식 때문에 이러한 방식이어야합니다. symfony2는 많은 일을하지만, 거의 모든 일을 처리하지는 않습니다. – Lighthart

+0

그래, 지금은별로 좋지 않다. 개발 상태에 있기 때문에 바보입니다. 그리고 종종 sql 파일을 변경합니다. 어쨌든 고마워. – craphunter

1

@ORM의 \ 열 (이름 = "사용자 이름", 유형 = "문자열"= 25, 독특한 = 진정한 길이) 내가 때문에 생각