모듈 Foo
에 의해로드 된 Doctrine 엔티티 Page
이 있습니다. 페이지는 Gedmo Doctrine Extension에서 제공하는 중첩 세트입니다. 모듈 Bar
에는 페이지와 관련된 다른 모델 Metadata
(1 : 1)이 있습니다. Foo
이 트리를로드 할 때 직접 메타 데이터에 참여하고 싶습니다.Doctrine 저장소의 쿼리 빌더의 이벤트 기반 확장
그래서 내부 모듈 Foo
는 :
$em->getRepository('My\Entity\Page')->getRootNodes();
이 페이지의 컬렉션을로드하지만 직접 메타 데이터를 사용할 수 있습니다 싶습니다. 노드를로드 한 후에 이벤트를 트리거하기 때문에 모든 모듈이이 이벤트를 구독하고 원하는대로 페이지를 사용할 수 있습니다 (이 경우 탐색 구조에는 메타 데이터가 필요하지만 탐색은 모듈 Foo
과는 무관합니다. Bar
).
시스템을 모듈화해야하므로 Page
은 Metadata
에 종속되지 않습니다. 어떻게 든 가능합니까? Bar
은 리포지토리에 쿼리를 작성하여 이벤트를 수신합니까? 그런 다음 추가 조인을 추가하여 각 페이지의 메타 데이터를로드합니다.
function getCalledOnEventTrigger($event)
{
$q = $event->getQueryObject();
$q->leftJoin('some join expression');
// Query now joins metadata as well
}