sfDoctrinePager分页的问题

时间:2012-02-28 06:03:47

标签: symfony1 doctrine pagination

我在我的模块中使用sfDoctrinePager。我在一个或多个标准上搜索表格。第一次显示的结果是正确的,但如果我点击第2页或更多,它再次给我整个结果集,我的搜索结果集丢失了。

我第一次面对这个问题,即使我很久以来一直在使用sfDoctrinePager。

我从搜索表单中获取此数组

(
    [field_type] => log_type
    [field_value] => ABC
    [is_active] => on
)

我将此数组变量发送到我的模型:

$getQuery = $objMgr->getSearchQuery($request->getPostParameters());

**在模型中运行的查询是:

public function getSearchQuery($arrSearchValues)
{
  $q = Doctrine_Query::create()
          ->select('u.*')
          ->from('SomsConfigValues u');
          ->where('u.deleted_at IS NULL');

  if(isset($arrSearchValues['is_active']) && $arrSearchValues['is_active'] == 'on'){
    $q->where('u.is_active = ?', 1);
  }      
  if(isset($arrSearchValues['field_type']) && $arrSearchValues['field_type'] != ""){
    $revertChg = ucwords(str_replace("_", " ", $arrSearchValues['field_type']));
    $q->andWhere('u.field_type = ?', $revertChg);
  }
  if(isset($arrSearchValues['field_value']) && $arrSearchValues['field_value'] != ''){
    $q->andWhere('u.field_type = ?', $arrSearchValues['field_value']);
  }
  return $q;
}

我第一次获得完美的搜索结果,但第二次(当我点击第2页时,它给出了整个结果集)。

我的行动是:

public function executeIndex(sfWebRequest $request)
{
$objMgr = AdminFactory::adminObject();
$getQuerys = $objMgr->getSearchQuery($request->getPostParameters());

$this->config_values = $getQuerys;     
$this->pager = new sfDoctrinePager('configValues',     sfConfig::get('app_max_row_display'));    
$this->pager->setQuery($this->config_values);
$this->pager->setPage($request->getParameter('page', 1));
$this->pager->init();
}

我使用此分页的模板是:

<div class="grid_footer">
        <div style="padding:5px;">
          <?php if(count($pager->getLinks())) : ?>
          <div class="tableControl">
            <div class="pagination_inner">
              <?php if(!$pager->isFirstPage()){ ?>
                <?php echo link_to1(image_tag('/images/first.png'), 'configValues/index?page='.$pager->getFirstPage()) ?>
                <?php echo link_to1(image_tag('/images/previous.png'), 'configValues/index?page='.$pager->getPreviousPage()) ?>
              <?php } ?>
              <div class="numbers">
                <?php if ($pager->haveToPaginate()): ?>
                  <?php $links = $pager->getLinks(); foreach ($links as $page): ?>
                    <?php echo ($page == $pager->getPage()) ? $page : link_to($page, 'configValues/index?page='.$page) ?>
                  <?php endforeach ?>
                <?php endif ?>
              </div>
              <?php if(!$pager->isLastPage()){    ?>
                <?php echo link_to1(image_tag('/images/next.png'), 'configValues/index?page='.$pager->getNextPage()) ?>
                <?php echo link_to1(image_tag('/images/last.png'), 'configValues/index?page='.$pager->getLastPage()) ?>
              <?php  } ?>
            </div>
          </div>
          <?php echo $pager->getNbResults() ?> results (page <?php echo $pager->getPage(); ?>/<?php echo count($pager->getLinks()); ?>)
          <?php endif; ?>
        </div>
      </div>

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。我找到的唯一方法是存储查询。而不是使用会话,在用户中创建一个属性来存储它。

在动作类中添加类似......

$this->getUser()->setAttribute('searchQuery', $getQuery);

此值会在整个会话期间持续存在,因此您可以使用例如

进行检索
$storedQuery = $this->getUser()->getAttribute('searchQuery');

您可以通过开发工具栏上的配置项查看用户属性。