我有专辑,内容,文件和注释实体,其中注释和文件是内容的关系,并且内容与专辑有关。
我想从单个内容实体中检索所有关系(文件和注释实体)(并且不为其他任何内容加载它们)。数据库的查询不得超过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);
}
}
我找到了解决方案。通过定义内容,以便它当时只能是单个专辑的成员 - 我可以通过内容加入专辑:
$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
属性中引用相同的对象。
最终结果,是一个查询。