1

저는 Symfony와 Doctrine에 익숙하지 않아 클래스 테이블 상속을 설정하는 데 문제가 있습니다. 나는 "TeamActionTarget"이라고 불리는 부모 엔티티와 "Player"와 "Competition"이라는 두 명의 아이들을두고있다.클래스 테이블 상속, 저장소 -> findByTypeId

// src/Van/TeamsBundle/Entity/TeamActionTarget.php 

namespace Van\TeamsBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Van\TeamsBundle\Entity\TeamActionTarget 
* 
* @ORM\Entity 
* @ORM\Table(name="van_teams_actions_targets") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="type_id", type="integer") 
* @ORM\DiscriminatorMap({"1" = "Competition", "2" = "Player"}) 
*/ 
abstract class TeamActionTarget 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

는 Doctrine2은 그들 만의 독특한 필드 2 개 필드, "ID"와 "TYPE_ID", 어린이 2 표와 나에게 부모 테이블을 생성 : 내 부모 개체의 모델은 다음과 같다. 지금하고 싶은 것은 폼에서 게시 된 정수 값에서 모든 자식 BY 유형을 검색하는 것입니다.

그래서 컨트롤러,이 코드 :

$em->getRepository('VanTeamsBundle:TeamActionTarget')->findByTypeId($targetType); 

을하지만 Symfony2 나에게 오류 반환 : 엔티티 "반 \ TeamsBundle \ 법인 \ TeamActionTarget"사실 더 필드 "유형 ID" 가 없습니다를 . 엔티티 모델에는이 필드가 없으며 상위 클래스 만이 필드를 포함합니다. 그래서 엔티티 모델에이 필드를 추가하려고 시도했지만 엔티티를 업데이트하려고 할 때이 필드와 디스크립터간에 충돌이 있다는 오류가 발생합니다.

내 질문은 매우 쉽습니다. 양식에서 게시 된 TYPE을 기준으로 자녀를 검색하려면 어떻게해야합니까?

+0

부모와 자식 사이의 @ OnetoMany' 관계를 설정해야합니다. – Nisam

+0

어디에서 추가해야합니까? 상위 엔티티 또는 하위 엔티티에서? – VaN

+0

상위 엔티티에서 $ TypeId를 추가하고 해당 getter 및 seters pls는 octrine manual을 참조 할 수 있습니다. http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html – Nisam

답변

2

단일 테이블 상속을 사용하여, 직접 자식 클래스의 저장소를 사용해야합니다 : 폼에 따라 다른 자식 개체를 검색하려는 경우

$em->getRepository('VanTeamsBundle:Player')->findAll(); 

을, 당신은 엔티티를 사용해야합니다 별칭 (예 : VanTeamsBundle : Player)을 양식 필드 값으로 가져 와서 getRepository() 메서드에 전달합니다. 이 작업을 수행하는 또 다른 방법은 data transformers을 사용하여 양식 필드 값과 엔터티 별칭 간의 사용자 지정 매핑을 수행하는 것입니다.