2012-05-22 2 views
0

모듈 Foo에 의해로드 된 Doctrine 엔티티 Page이 있습니다. 페이지는 Gedmo Doctrine Extension에서 제공하는 중첩 세트입니다. 모듈 Bar에는 페이지와 관련된 다른 모델 Metadata (1 : 1)이 있습니다. Foo이 트리를로드 할 때 직접 메타 데이터에 참여하고 싶습니다.Doctrine 저장소의 쿼리 빌더의 이벤트 기반 확장

그래서 내부 모듈 Foo는 :

$em->getRepository('My\Entity\Page')->getRootNodes(); 

이 페이지의 컬렉션을로드하지만 직접 메타 데이터를 사용할 수 있습니다 싶습니다. 노드를로드 한 후에 이벤트를 트리거하기 때문에 모든 모듈이이 이벤트를 구독하고 원하는대로 페이지를 사용할 수 있습니다 (이 경우 탐색 구조에는 메타 데이터가 필요하지만 탐색은 모듈 Foo과는 무관합니다. Bar).

시스템을 모듈화해야하므로 PageMetadata에 종속되지 않습니다. 어떻게 든 가능합니까? Bar은 리포지토리에 쿼리를 작성하여 이벤트를 수신합니까? 그런 다음 추가 조인을 추가하여 각 페이지의 메타 데이터를로드합니다.

function getCalledOnEventTrigger($event) 
{ 
    $q = $event->getQueryObject(); 
    $q->leftJoin('some join expression'); 
    // Query now joins metadata as well 
} 

답변

0

Zend \ EventManager를 사용하여이 작업을 완료했습니다. 사용자 정의 저장소에 삽입했습니다. Doctrine은 모든 관계를 알고 있어야하므로 실제로 작동하지 않지만 실제로 정의에서 수행하려는 쿼리는 실행할 수 없습니다. 그럼에도 정의를 추가하여 해결했습니다.