2011-09-03 6 views
8

MYSQL 스키마를 사용하여 고유 한 DB 키를 설정할 수 있다는 것을 알고 있지만 ORM의 독트린이 코드에서 고유 한 열을 설정할 수 있는지 궁금했던가요?doctrine2를 사용하여 고유 한 열을 적용 할 수 있습니까?

예를 들어 런타임에 코드에서 사용자 이름이 고유하도록 코드에서 어떻게 만들 수 있습니까?

CREATE TABLE IF NOT EXISTS `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    `email` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 






function insert_user($username,$email,$password) 
     { 
$user = new User(); 
$user->setUsername($username); //HOW CAN I MAKE THIS UNIQUE IN CODE? 
$user->setEmail($email); 
$user->setPassword($password); 

    try { 
      //save to database 
      $this->em->persist($user); 
      $this->em->flush(); 
     } 
     catch(Exception $err){ 

      die($err->getMessage()); 

      return false; 
     } 
     return true; 
     } 

답변

19

나는 이것이 원하는 것으로 가정하고 있습니까? 내가 코드를 가지고 있지 않기 때문에

<?php 
/** 
* @Entity 
* @Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})}) 
*/ 
class ECommerceProduct 
{ 
} 

http://www.doctrine-project.org/docs/orm/2.0/en/reference/annotations-reference.html#annref-uniqueconstraint

나는 당신에게 실제적인 예를 들어 줄 수 없습니다.

+0

질문에 따라 코드를 추가했습니다. – jini

+1

내가 바꿀 필요가있는 테이블 스키마입니다. uniqueConstraints = {@ UniqueConstraint (name = "myname ", columns = {"username "}) 아마 당신이 원하는 것을 추가 할 수 있습니다. – Andreas

+0

더 나은 환경에서 작동하므로 더 나은 답변입니다. – Dennis

2

당신은

@UniqueConstraint

주석이 엔티티 클래스 수준에서 @Table 주석 내부에 사용되는 @Table 선언에 UNIQ 제약 조건을 설정해야합니다. SchemaTool이 지정된 테이블 열에 대해 데이터베이스 고유 제약 조건을 생성하도록 힌트를 제공합니다. SchemaTool 스키마 생성 컨텍스트에서만 의미가 있습니다.

필수 속성 : 이름 : 인덱스의 이름, : 열 배열입니다.

<?php 
/** 
* @Entity 
* @Table(name="user",uniqueConstraints={@UniqueConstraint(name="username_uniq", columns={"username"})}) 
*/ 
class User 
{ 
    /** 
    * @Column(name="username", length=300) 
    */ 
    protected $username; 
} 

소스 :

37

http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/annotations-reference.html#annref-uniqueconstraint 그냥 조금 간단 대체 솔루션을 제공합니다.

는 단일 열이있는 경우, 당신은 단순히 열 정의에 고유을 추가 할 수 있습니다 이것에

class User 
{ 
    /** 
    * @Column(name="username", length=300, unique=true) 
    */ 
    protected $username; 
} 

문서 : http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#column

여러 열에 대한 고유 인덱스를해야하는 경우 Andreas가 제공 한 방법을 사용해야합니다.

참고 : 사용 가능한 버전이 확실하지 않습니다.

관련 문제