2012-05-22 24 views
0

我有一個Doctrine實體Page,它由模塊Foo加載。該頁面是由Gedmo Doctrine Extension提供的嵌套集合。模塊Bar有另一個模型Metadata,1:1涉及到一個頁面。我想在Foo加載樹時直接加入元數據。基於事件的原則擴展庫中的查詢生成器

所以內部模塊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 
} 

回答

0

我通過使用Zend \ EventManager注入到我的自定義存儲庫中完成了此操作。這有效,但仍不能正常工作,因爲Doctrine必須知道所有關係,所以我實際上想要執行的定義的查詢是不可能執行的。我通過添加定義來解決它。