When thinkphp paging data query, if the cache is set, only the first page will be displayed. How to break it?
That is, 12 >> This effect comes out, but when you click 2, the content of page 1 is still displayed.
$count=M('visitdata')->where(array('works_code'=>$get_code))->count();
$Page=new \Think\Page($count,10);
$show=$Page->show();
S($get_code.'visitdata',null); //If the cache is not cleared first, only page 1 will be displayed...
// Perform paging data query. If cache is set here, only page 1 will be displayed.
M('visitdata')->cache($get_code.'visitdata',60)->where(array('works_code'=>$get_code))->order('visit_id')->limit ($Page->firstRow.','.$Page->listRows)->select();
$cache_visitdata=S($get_code.'visitdata');
$this->assign(array(
'code'=>$get_code,
'visitdata'=>$cache_visitdata
));
$this->assign('page',$show);
$this->display();
12 >> This effect comes out, but when you click 2, the content on page 1 is still displayed.
How to break it?
This is TP3.2. I haven’t used it for a long time and I have forgotten how to use it. The questioner can do this:
Get page number
Check whether the cache corresponding to the page number exists (the cache key can be written like this:
'content_page_' . $page
)Return if cache exists
If the cache does not exist, execute the database query and cache a copy. The next time the request comes in, it will be cached directly
I think the main problem lies in the cached key value.
s key plus paging mark
Output sql statement for debugging, first see what sql is executing and then find the problem
What you have here: ->cache($get_code.'visitdata',60)
$get_code.'visitdata' is the same in the case of paging, so it will not be updated.
You should be able to include the page number in this key.