在我的symfony2 / 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 :(得分:0)
如果您遇到内存问题,可能是因为您在内存中同时加载了太多行。
来自Doctrine文档: http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#iterating-large-results-for-data-processing
它可以让您在没有内存问题的情况下迭代搜索结果。它会在需要时加载行。
您还可以使用这些方法查询有限数量的行:
查询:: setMaxResults($的maxResults)
查询:: setFirstResult($偏移)
如果您计划在列上获取COUNT,SUM,AVG或任何其他聚合函数,我建议您进行查询以从迭代中获取这些而不是聚合信息。查询会更快。
我希望这会有所帮助