0

我有专辑、内容、文件和评论实体,其中评论和文件是内容的关系,而内容与专辑相关。

我想从单个内容实体中检索所有关系(文件和评论实体)(而不是为任何其他内容加载它们)。对数据库的查询不应超过 2 个。

使用单个查询检索关系并填充实体对象的好方法是什么?

例如

$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);
    }
}
4

1 回答 1

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'

然后 Doctrine 2 魔术确保返回的内容也引用$album->contents属性中的相同对象。

最终结果是单个查询。

于 2012-10-22T08:20:48.733 回答