2012-06-11 7 views
4

2 개의 필드가있는 UniqueEntity를 만들려고합니다 (둘 다 ManyToOne 필드 임).ManyToOne 필드가있는 Doctrine @UniqueEntity?

코드는 다음과 같다 :

/* 
* @ORM\Table() 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks() 
* @UniqueEntity(fields={"user", "connect"}) 
*/ 
class UserConnect 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var boolean $isLeader 
    * 
    * @ORM\Column(name="isLeader", type="boolean") 
    */ 
    private $isLeader; 

    /** 
    * @var date $joinedDate 
    * 
    * @ORM\Column(name="joinedDate", type="date") 
    */ 
    private $joinedDate; 

    /** 
    * @ORM\ManyToOne(targetEntity="User", inversedBy="userConnects") 
    * 
    */ 
    private $user; 

    /** 
    * @ORM\ManyToOne(targetEntity="Connect", inversedBy="userConnects") 
    * 
    */ 
    private $connect; 

목표는 내가 CONNECT와 사용자를 연결 하나의 엔티티를 가지고 있는지 확인하는 것입니다.

@UniqueEntity 신고서에 다른 내용을 써야합니까?

답변

-1

속성 주석에도 고유 선언을 추가해야합니다.

/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="userConnects") 
* @ORM\Column(unique=true) 
*/ 
private $user; 

/** 
* @ORM\ManyToOne(targetEntity="Connect", inversedBy="userConnects") 
* @ORM\Column(unique=true) 
*/ 
private $connect; 

symfony doc이 StackOverflow의 answer를 참조하십시오.

+0

올바르지 않습니다. 이렇게하면 각 사용자가 하나의 연결 만 바인드 할 수 있고 각 연결은 하나의 사용자 만 바인드 할 수 있습니다. @Estopero의 대답은 정답뿐 아니라 설명이 – Fodagus

7

난 당신이 사용자하나 개의 레코드 필드를 연결 모두 데이터베이스에있는 다른 레코드에 중복되는 경우에만 오류가 발생 할 이해합니다.

@UniqueEntity 주석

바르게 목적 (다중 열 인덱스)에 대한 선언 만 양식 유효성 검사를 트리거되고 DDBB 스키마에 영향을하지 않습니다.

당신이 표() 선언에 @UniqueConstraint 주석을 사용, 새로운 인덱스에 이름을 제공해야합니다 데이터베이스 수준에서 같은 검사를 추가합니다. 뭔가 같이 : 당신이 각 당신은 매우 다른 행동을 얻을 것이다 속성 (독특한 = TRUE) @ORM의 \ 열을 선언하는 경우 다른 손에

/* 
* @ORM\Table(uniqueConstraints={@ORM\UniqueConstraint(name="IDX_USER_CONNECT", columns={"user_id", "connect_id"})}) 
* @ORM\Entity 
* @ORM\HasLifecycleCallbacks() 
* @UniqueEntity(fields={"user", "connect"}) 
*/ 
class UserConnect 
{ 

, 그것은 여러 열 수 없게됩니다 index하지만 두 개의 독립적 인 고유 한 열이 있습니다. 동일한 user_id를 두 번 입력하면 connect_id 값과 별개로 오류가 발생하고 동일한 connect_id 값을 두 번 입력하면 동일하게 발생합니다.

+0

잘 설명되어 있습니다. –

5

이 작동 :

/** 
* State 
* 
* @ORM\Table(
* name="general.states", 
* uniqueConstraints={ 
*  @ORM\UniqueConstraint(name="states_country_name_code_key", columns={"idcountry", "name","code"}), 
* }) 
* @ORM\Entity(repositoryClass="Fluency\Bundle\GeneralBundle\Entity\Repository\StateRepository") 
*/ 
class State 
{....... 

내 시스템에 엔티티에서 촬영. 이 방법은 데이터베이스 스키마에 영향을줍니다. 내가 어디 @\ORM\UniqueConstraint annotation 넣어 참조하십시오. 미안 해요 @estopero ... 다음에 다른 답변을 먼저 읽어야합니다.