在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践

Posted

技术标签:

【中文标题】在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践【英文标题】:Best practices of implementing pagination in Doctrine2 ORM on repository level 【发布时间】:2013-08-19 09:03:07 【问题描述】:

我知道Doctrine's Paginator,但它适用于 DQL 级别。我正在寻找的是一种在存储库级别实现分页的方法。

我看到的第一种方法是在 repo 中封装分页:

通过使其所有方法接受两个额外的参数,$offset$limit,或者

通过在我的 repo 中实现 setOffsetsetLimit 方法,这将影响它的所有 find... 方法(由于 DefaultRepositoryFactory 实现 which behaves as a Singleton Factory 这不好)。

另一种方法是在this question 中创建一个ResultBuilder 类。我不太喜欢这种方法,因为它适用于预取的结果集,即使使用 Doctrine 的延迟加载,它也会进行额外的数据检索。

还有哪些其他方法可以解决这个问题,哪种方法最适合 Doctrine2 ORM 用户?

【问题讨论】:

【参考方案1】:

我发现的一个可能的解决方案是创建一个相应的过滤器(使用 LIMIT 语句),如official documentation 中所述,并在使用它的查询方法(包括自定义)之前将该过滤器应用于存储库。

【讨论】:

以上是关于在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP MVC 中实现工作单元、存储库和业务逻辑?

如何在 C# 中实现 ORM

如何在 ORM 中实现一致的事务?

在每个模型的不同 DAL 类中实现 JPA 存储库方法时如何避免重复的代码行/代码块

如何在Doctrine2中为单个实体使用多个存储库?

如何在sqlite django ORM中实现have子句