2011-01-31 6 views
4

내가 가지고있는 다음과 필드 구조 forums라는 테이블 :교리의 다형성 연관

  1. OBJECT_TYPE -> [그룹 | 페이지 | 토너먼트 | etc ....] (Possible values. 각 요소는 자체 테이블을 가지고있다.)

  2. object_id -> [그룹 ID | 페이지의 ID | 토너먼트의 이드 | 등

    그런 다음

나는 다음과 같은 테이블 ..] 등 (아이디 OBJECT_TYPE)

  • id_forum, 4.name, 한 :

    그것이 Group, Page, Tournament, 등등이다 doctrine을 사용하여 이것을 구현할 수 있습니까?

  • 답변

    0

    비슷한 문제가있었습니다. this post에 Doctrine 2.2에서 다형성 연결을 구현하는 방법에 대한 완전한 예제를 게시했습니다.

    7

    이 글은 덧글이어야했지만 내 평판은 너무 낮습니다. 미안합니다.

    불행히도 다형성 연관은 CTI (클래스 테이블 상속)와 완전히 동일하지 않습니다. CTI는 모든 하위 클래스에 대해 동일한 ID를 가진 상위 테이블이 필요합니다.

    CTI는 대부분의 경우 작동 할 수 있지만 이미 고유 한 ID가 있거나 기존 ID 유형이 다른 기존 엔터티간에 다형 연관을 만들려는 경우 문제가 될 수 있습니다.

    게다가 CTI는 각 하위 클래스에 대한 부모 테이블에 레코드를 생성해야합니다.이 레코드는 다형성 연관에 쓸모가 없습니다. 다형성 연관은 테이블을 필요로하지 않아야하며 기존 테이블을 (id, type) 조건으로 조인해야합니다. Doctrine은 단순성/성능상의 이유로 부모 테이블을 필요로한다고 생각합니다.

    CTI가 해결책이 아닌 경우 Repository 수준에서 다형성 연관을 에뮬레이션하는 것이 좋습니다. 즉 $ type 속성을 사용하여 추상 저장소를 만들고 현재 쿼리를 자동으로 대상 테이블에 결합하는 polymorphicJoin 메서드를 구현합니다. id/type 조건. 그런 다음 추상 Repository를 하위 클래스 Repositories로 확장하고 find/select 메소드에서 필요한 경우 polymorphicJoin 메소드를 호출하십시오.

    Doctrine에서 그런 종류의 연관성이 구현 되었다면 정말 멋질 것입니다.