如何用PAGINATION CakePhp 2.x查询/查找结果?

Lag*_*ign 0 php pagination caching cakephp

我用Cache::read(),Cache::write()在CakePHP中缓存查询.

如何更新paginator params或CACHE整个paginator?

它很容易缓存查询结果但是如何缓存$this->Paginator->params()呢?

我试着Cache::write() $this->Paginator->params(),但如何修改$this->Paginator->params()缓存后?当我做某事时:...

$this->Paginator->params['paging'][$model] = $paginator_params;
Run Code Online (Sandbox Code Playgroud)

......我注意到了:

Indirect modification of overloaded element of CakeRequest has no effect
Run Code Online (Sandbox Code Playgroud)

我何时何地可以重写PAGINATOR params/set cached params?

谢谢.

小智 5

你需要缓存$this->request->params['paging']数组.

而你必须将Paginator Helper添加到$helpers阵列中.如果不这样做,则不会调用preRender方法的Paginator助手,并且会破坏分页链接.

$page = !isset($this->request->named['page']) ? '1' : $this->request->named['page'];
$products = Cache::read('my_unique_cache_id_' . $page, 'query');  
$paging = Cache::read('my_unique_cache_id_paging_' . $page, 'query');

if ($products && $paging) {
    $this->set('products', $products);
    $this->request->params['paging'] = $paging;

}else{
    $products = $this->paginate('Product');
    Cache::write('my_unique_cache_id_paging_' . $page, $this->request->params['paging'], 'query');
    Cache::write('my_unique_cache_id_' . $page, $products, 'query');
    $this->set('products', $products);
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你:`$ this-> request-> params ['paging'] = $ paging;` - 我更喜欢Cache :: write'product'和'paging'到1个文件:'my_unique_cache_id'而不是2个文件(第二个用于分页)并生成'cache_id'我使用`$ cache_id ='products_'.http_build_query($ this-> request-> params ['named']);`;) (2认同)