2015-03-31 125 views
0

在我的symfony2/doctrine2应用程序中,用户可以标记引起管理员注意的元素。doctrine2:如何从不同的存储库中选择实体

我需要检索所有标记的元素(它们实现了一个VoteInterface)。

我试图没有成功做到以下,但它不工作,因为我需要选择至少一个根实体。如果我选择一个根实体,我有一个内存分配错误。

无论如何,我甚至不确定这是正确的路要走。我如何选择与投票相关的所有元素?当然,我可以为每个实体类型构建一个查询构建器,但这不是我要在这里完成的,我想要一个查询构建器。

public function getFlagsQueryBuilder() 
{ 
    return $this 
     ->createQueryBuilder('v') 
     ->select('u, c, p') 
     ->leftJoin('v.user', 'u') 
     ->leftJoin('v.comment', 'c') 
     ->leftJoin('v.post', 'p') 
     ->groupBy('u, c, p') 
     ->addSelect('u, c, p') 
     ->where('v.value = ?1') 
     ->setParameter(1, 0) 
     ; 
} 

回答

0

如果您遇到内存问题,可能是因为您同时在内存中加载了太多行。

从学说文档: http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#iterating-large-results-for-data-processing

它可以让你通过你的结果迭代,而无需内存问题。它会在需要时加载行。

你也可以使用这些方法来查询行的数量有限:

查询:: setMaxResults($的maxResults)

查询:: setFirstResult($偏移)

如果您计划在列上获取COUNT,SUM,AVG或任何其他集合函数时,我建议您进行查询以获取这些信息,而不是迭代中的聚合信息。查询会更快。

我希望这有助于

+0

谢谢,但我更想弄清楚如何正确地写这个查询来一次获取不同的实体。 – 2015-03-31 23:12:30

相关问题