我在我的模块中使用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>
答案 0 :(得分:0)
我遇到了完全相同的问题。我找到的唯一方法是存储查询。而不是使用会话,在用户中创建一个属性来存储它。
在动作类中添加类似......
$this->getUser()->setAttribute('searchQuery', $getQuery);
此值会在整个会话期间持续存在,因此您可以使用例如
进行检索$storedQuery = $this->getUser()->getAttribute('searchQuery');
您可以通过开发工具栏上的配置项查看用户属性。