2012-10-21 70 views
0

我有Album,Content,File和Comment實體,其中Comment和File是Content的關係,Content與Album相關。優化Doctrine 2實體關係加載

我想從單個內容實體中檢索所有關係(文件和評論實體)(並且不加載任何其他內容)。數據庫應該不超過2個查詢。

什麼是使用單個查詢檢索關係並填充實體對象的好方法?

E.G

$album = $em->createQuery('SELECT a,c FROM Album JOIN a.contents c WHERE a.id = :id')->getOneOrNullResult(); 

foreach ($album->getContents() as $content) { 
    if ($content->getId() == $id) { 
     // Load all (relevant) relations for this content in a single query with joins 
     $em->MAGIC($content); 
    } 
} 

回答

0

我找到了解決這個。通過定義的內容,例如,它只能是在當時單曲專輯中的一員 - 我可以通過內容本身加入專輯:

$dql = 'SELECT a,c,cc,cf,ac FROM Content c JOIN c.album a JOIN a.content ac JOIN c.comments cc JOIN c.file cf WHERE c.id = :id' 

然後學說2魔確保返回的內容,被引用$album->contents屬性中的同一對象也是如此。

最終結果是單個查詢。