【问题标题】:How can I use efficiently paginate with doctrine in Symfony 2?如何在 Symfony 2 中有效地使用学说分页?
【发布时间】:2012-12-05 00:47:16
【问题描述】:

我想在 Symfony 中使用 Doctrine ORM 和分页方法。 KnpPaginatorBundle 看起来简单易用。我还使用 Doctrine 存储库,因为查询可以很容易地重用和测试。

此捆绑包与我发现的其他捆绑包一样工作。它需要查询生成器作为参数。有没有比给每个存储库函数提供分页器作为参数(或 null)更好的方法?我不想对每个查询结果进行分页,所以我认为所描述的解决方案不是最好的,我正在寻找建议。

【问题讨论】:

  • 在性能方面,最好在数据库级别对结果进行分页,这样可以避免将结果映射到对象的开销,减少网络流量并且您的数据库服务器不需要读取/过滤那么多记录。我不确定该捆绑包是如何工作的,但您可以检查执行了哪些查询并查看分页是否发生在查询本身上。如果是这样,你就可以走了。如果您不想一遍又一遍地构建相同的查询,请将它们定义在存储库 symfony.com/doc/2.0/book/…
  • 我忘了说,如果你在数据库级别分页,你需要统计所有的记录,这样你就可以计算出有多少页。您可以为此使用缓存或以其他方式跟踪表的长度以避免这种情况。
  • 捆绑包使用github.com/KnpLabs/knp-components在数据库级别分页
  • 这个问题没有正确答案。我们评估了这些选项并选择了 Pagerfanta/white-october/pagerfanta 捆绑包,这是一个替代选项,包括一个接受查询构建器或查询对象的理论 orm 适配器,您可以从自定义存储库类方法中返回它们。见:github.com/whiteoctober/Pagerfanta

标签: php symfony doctrine-orm pagination symfony-2.1


【解决方案1】:

我知道这样做的两个捆绑包:

两者都可以对 ORM/Query 或 ORM/QueryBuilder(以及更多)进行分页。

【讨论】:

  • 我对第二个非常感兴趣,但我需要 PostgreSQL 集成。为什么你的包不支持它?
猜你喜欢
  • 2016-03-31
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-11
相关资源
最近更新 更多