doctrine2:如何从不同的存储库中选择实体

时间:2015-03-31 12:52:03

标签: symfony doctrine-orm doctrine query-builder

在我的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)
        ;
}

1 个答案:

答案 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或任何其他聚合函数,我建议您进行查询以从迭代中获取这些而不是聚合信息。查询会更快。

我希望这会有所帮助