我有专辑,内容,文件和评论实体,其中评论和文件是内容的关系,内容与专辑相关。
我想从单个内容实体中检索所有关系(文件和注释实体)(而不是为任何其他内容加载它们)。对数据库的查询不应超过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 :(得分: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 magic确保返回的内容也引用$album->contents
属性中的同一对象。
最终结果,是一个查询。