2017-11-15 13 views
1

의 내가 이제 하나의 엔티티 사람한 관계에 하나의 반전 된 측면에서 개체 속성을 입력

class Person 
{ 
... 
    /** 
    * @var Player 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\Player", inversedBy="person") 
    */ 
    private $player; 
... 
} 

하나의 엔티티 플레이어

class Player 
{ 
... 
    /** 
    * @var Person 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\Person", mappedBy="player") 
    */ 
    private $person; 
... 
} 

과의 일대일 관계가 가정하자 사람 측은 그 사람의 외래 키를 잡고있다.

모든

은 [\ ORM \ ORMException 교리]
당신은 협회 필드를 검색 할 수 없습니다

$em->getRepository('AppBundle:Player')->findByPerson(); 

가 끝나는 예를 들어, 실패 역전되는 측면에서 뭔가를 액세스하려고 'AppBundle \ Entity \ Player # person'이 (가) 연관의 반대면이기 때문에 입니다. 메소드가 사이드 제휴를 소유하고있을 때만 작동합니다.

소유 측과 동일한 것을 수행하면 (사람을 찾는 플레이어) 모든 것이 정상입니다.

알아낼 수 없음 : 엔티티 양쪽에서 엔티티에 어떻게 액세스 할 수 있습니까?

필자가 알고 있어야하기 때문에, 어떤 플레이어가 아직 할당되지 않았으며 그 반대도 마찬가지입니다. 나는 생각, 교리 관련된 엔터티를로드 중입니다 ...이 경우 일반 SQL은 쉽게 솔루션을 보인다? 아니면 내가 정말 dql과 조인을 다루어야합니까? 클래스 플레이어에서

답변

0

, 당신이 함께 시도 할 수 있습니다 :

다음
class Player 
{ 
... 
    /** 
    * @var Person 
    * @ORM\OneToOne(targetEntity="AppBundle\Entity\Person", mappedBy="player") 
    * @ORM\JoinColumn(name="person_id", referencedColumnName="id") 
    */ 
    private $person; 
... 
} 

이 교리의 문서입니다 : http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-one-bidirectional

+0

내가 보듯이 문서가 말한대로, 당신은 단지 ... joinColumn 파트를 추가, 키 열이 명명 체계와 다르지 않은 한이를 추가 할 필요가 없습니다. 위의 항목은 "person_id"라는 Player 엔티티에 또 다른 열을 생성하고이를 Person-> Player와의 관계가 이미 다른 엔티티와 존재하므로 외래 키 제약 조건을 가진 엔티티 person "id"에 연결합니다. 측면 (person.player_id = player.id) ... –