在我的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)
;
}
如果您遇到内存问题,可能是因为您同时在内存中加载了太多行。
根据条令文件:http://doctrine-orm.readthedocs.org/en/latest/reference/batch-processing.html#iterating-数据处理的大结果
它可以让你在没有内存问题的情况下反复查看结果。它将在需要时加载行。
您也可以使用这些方法来查询有限数量的行:
查询::setMaxResults($maxResults)
查询::setFirstResult($offset)
如果您计划在列上获取COUNT、SUM、AVG或任何其他聚合函数,我建议您进行查询以获取这些函数,而不是从迭代中获取聚合信息。使用查询会更快。
我希望这能帮助