Symfony1 sfDoctrinePager分页的问题
我正在模块中使用sfDoctrinePager。我根据一个或多个条件搜索表。第一次显示的结果是正确的,但之后如果我单击第2页或更多页,它会再次显示整个结果集,我的搜索结果集将丢失 我第一次面对这个问题,尽管我已经使用sfDoctrinePager很久了 我从搜索表单中获取此数组Symfony1 sfDoctrinePager分页的问题,symfony1,doctrine,pagination,Symfony1,Doctrine,Pagination,我正在模块中使用sfDoctrinePager。我根据一个或多个条件搜索表。第一次显示的结果是正确的,但之后如果我单击第2页或更多页,它会再次显示整个结果集,我的搜索结果集将丢失 我第一次面对这个问题,尽管我已经使用sfDoctrinePager很久了 我从搜索表单中获取此数组 ( [field_type] => log_type [field_value] => ABC [is_active] => on ) 我将此数组变量发送到我的模型: $get
(
[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>
结果(第页)
我遇到了完全相同的问题。我发现解决这个问题的唯一方法是,正如您所说的,存储查询。不要使用会话,而是在用户中创建一个属性来存储该会话
在动作课上,放一些像
$this->getUser()->setAttribute('searchQuery', $getQuery);
此值在整个会话中持续存在,因此您可以使用例如
$storedQuery = $this->getUser()->getAttribute('searchQuery');
您可以通过dev工具栏上的config项查看用户属性。您可以显示您的操作,以及显示您在哪里创建下一页
链接的视图吗?
链接…我已经添加了我的操作代码和模板分页代码。我想我必须将查询存储在会话中,以便反复检索。这是现在看来唯一可行的方法。。。。任何建议。