如何在Symfony 2中高效使用Doctrine分页?

5
我想在Symfony中使用Doctrine ORM和分页方法。KnpPaginatorBundle看起来简单易用。我还使用Doctrine repositories,因为查询可以轻松重复使用和测试。
这个bundle的工作方式类似于我发现的其他bundle。它需要查询构建器作为参数。有没有比将paginator作为参数(或null)传递给每个repository函数更好的方法?我不想对每个查询结果进行分页,所以我认为所描述的解决方案不是最佳的,并且我正在寻找建议。

3
在性能方面,最好在数据库层面分页结果,这样可以避免将结果映射到对象的开销,减少网络流量,而且您的数据库服务器也不需要读取/过滤那么多记录。我不确定bundle如何工作,但您可以检查执行的查询并查看分页是否在查询本身上进行。如果是这样,就可以继续使用。如果您不想一遍又一遍地构建相同的查询,请在存储库上定义它们http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes - ButterDog
我忘了提到,如果你在数据库层面进行分页,你需要计算所有记录的数量,以便计算出有多少页。你可以使用缓存来实现这一点,或者通过其他方式跟踪表的长度以避免这种情况。 - ButterDog
该软件包使用 https://github.com/KnpLabs/knp-components 在数据库层面上进行分页。 - Robert Dolca
这个问题没有标准答案。我们评估了各种选项,并选择了Pagerfanta/white-october/pagerfanta bundle,这是一个备选方案,它包括一个Doctrine ORM适配器,可以接受查询构建器或查询对象,您可以从自定义存储库类方法中返回。请参见:https://github.com/whiteoctober/Pagerfanta - gview
1个回答

2

我对第二个非常感兴趣,但我需要PostgreSQL集成。为什么你的捆绑包不支持它? - sentenza

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接