【问题标题】:sfPropelPager reduce queriessfPropelPager 减少查询
【发布时间】:2011-12-01 14:30:32
【问题描述】:

我正在一个 symfony 项目中工作,并使用 sfPropelPager 来显示一个分页的元素列表。 问题是要列出大量数据(即数千个寄存器)它会查询数据库以显示每个页面!!!!这意味着在我的情况下大约有 100 个额外的查询,这是不可接受的。

显示我的一些代码:返回寻呼机对象的函数

$pager = new sfPropelPager('MyTable',sfConfig::get('sfPropelPagerLines'));
$c = new Criteria();
$c->add('my_table_field',$value);
$c->addDescendingOrderByColumn('date');
$pager->setCriteria($c);
$pager->init();
return $pager;

所以,如果您知道一种仅通过一个查询即可获得所有结果的方法,那将是解决我的问题的好方法。否则,我必须为用户想要查看的每个页面使用 ajax 调用来实现该列表

非常感谢您的宝贵时间。

【问题讨论】:

    标签: mysql symfony1 propel


    【解决方案1】:

    我不确定你的问题,但无论如何,请避免使用Criteria。尝试使用ModelCriteria API 进行查询:http://www.propelorm.org/reference/model-criteria.html

    对于每个分页页面,将对数据库进行查询,这是我所知道的所有寻呼机的标准行为。如果它与相关对象相关(假设您要显示关系中的信息),您可能需要创建一个查询,在分页之前链接这些对象,这样您每页将获得一个查询以显示所有数据。 例如阅读此文档:http://www.propelorm.org/documentation/03-basic-crud.html#query_termination_methods

    【讨论】:

    • 我的问题是,在数据量很大的情况下,寻呼机会执行不可接受的查询次数,而显然只能进行一次查询,并使用该查询的结果构建寻呼机对象。我在问sfPropelPager 是否可以做到。与标准系统无关
    • 300 次查询一个简单的测试表,其中一小部分信息将在未来存储。更具体地说,我正在使用该页面来显示日志条目列表。这个列表将来会增长很多,所以如果现在我只有在开发环境中有 300 个查询,在生产环境中的 3-6 个月内我可能会有 1000000+ 个查询!!!显然不能接受
    【解决方案2】:

    最后我没有得到问题的解决方案,我不得不通过AJAX调用来实现列表,调用一个返回请求页面的函数,所以在页面加载时,没有查询这个列表正在减慢用户体验。

    还是谢谢你帮我:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多