【问题标题】:Typo3 fluid design: Pagination Vs SQL setLimitTypo3 流体设计:Pagination Vs SQL setLimit
【发布时间】:2019-02-25 14:32:29
【问题描述】:

我想提出一个值得商榷的问题。

我有一个包含 1000 行数据的表。我希望能够在前端搜索引擎中搜索和查看所有这些行。

我想每页显示 50 个结果。

问题是 - 我应该通过我的存储库简单地返回所有过滤结果(可能 1000 行数据)并让我的流体引导布局处理分页,还是应该告诉我的存储库使用 setLimit 和 offset 只返回 50 行应该在当前页面中显示的数据?

最初我认为无论哪种方式都会在每次页面调用时请求 SQL 语句,因此后者会更好,因为 SQL 返回的数据上限为 50 行,但现在我怀疑 Typo3 使用某种存储库或数据库缓存,这意味着数据库批量数据只被调用一次并存储在内存中,其余的将由流体分页处理。另外,使用 setLimit 和 Offset 我必须构建自己的分页系统。

你认为什么更有效?我应该允许 sql 语句返回所有数据并流畅地处理分页,还是应该首先使用 setLimit 限制 sql 语句并构建自己的分页?或者有没有办法将两者混合?

附加信息:

我的存储库 SQL 搜索相当简单。它正在使用:

$query = $this->createQuery();

...加上一个“匹配”查询来过滤结果,最后是

return $query->execute(); 

【问题讨论】:

    标签: typo3 repository-pattern fluid-layout typo3-extensions


    【解决方案1】:

    如果您使用widget.paginate ViewHelper,它将自动正确限制查询。在您尝试访问数据之前,不会执行查询,因此只要您不尝试访问分页 ViewHelper 之外的数据,就无需手动限制。

    【讨论】:

    • 目前我执行搜索并使用分配将结果传递给视图。这是否意味着它会自动限制查询?如果是这样那就太好了,这就是我所希望的
    • 我不能说 100% 肯定,因为我不知道你是如何获取结果的,但只要你不做任何奇怪的事情,它就应该这样工作。如果您想确定,请使用 MySQL(或其他数据库)查询日志来查看实际执行了哪些查询。
    • 是的,我认为没关系。我只是在使用 $query = $this->createQuery();加上一个“匹配”查询来过滤结果,最后是 return $query->execute();
    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多