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



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

我希望这能帮助

相关内容

  • 没有找到相关文章

最新更新