thinkphp 5.1分页必须严格按手册规范调用paginate()、order()和query参数,否则导致翻页卡死、搜索丢失、总数错乱且静默失效;控制器中须链式调用paginate()于查询末尾,不可先select()再分页;模板中用{volist name="list"}遍历并{$list->render()}输出分页栏;传参需通过query保留搜索条件;大数据量下应关闭totalcount、启用simple分页并添加复合索引优化性能。

ThinkPHP 5.1手册不是PDF文档或网页导航栏,而是指框架内置的分页与查询机制——你必须按手册级规范调用paginate()、order()和query参数,否则翻页卡死、搜索丢失、总数错乱会立刻发生,且错误不报异常只静默失效。
控制器中写对分页链式调用
第一步:直接在Db或模型查询末尾接paginate(),传入每页条数,【不可中断链式,严禁先select()再分页】。
正确写法:$list = Db::name('article')->where('status', 1)->order('create_time desc')->paginate(12);
错误写法:Db::name('article')->where('status', 1)->select()->paginate(12); —— 这已把全表数据加载进PHP内存,paginate()只是对数组切片,翻页时仍查全表,性能崩塌。
模型写法同理:$list = Article::where('is_delete', 0)->order('id desc')->paginate(8);
模板里正确渲染数据和分页栏
用{volist}遍历$list变量本身,不要解包、不要取data子键。
{volist name="list" id="item"}
{$item.title} — {$item.author}
{/volist}
分页HTML必须调用render()方法输出,【不能写成{$list->show()}、{$page|raw}(除非你单独assign了$page)或{$list|raw}】。
标准写法:{$list->render()}
这一步操作起来很简单,直接把那行代码贴进模板对应位置就行。
翻页时不丢搜索条件的两种传参方式
方法一:透传全部GET参数(适合后台管理类页面)
在paginate()第三个参数中加入['query' => request()->param()]:
$list = Db::name('user')->where('status', 1)->paginate(10, false, ['query' => request()->param()]);
方法二:精准控制传参(推荐用于含password、token等敏感字段的场景)
手动提取需保留的字段,拼成关联数组:
$keyword = input('keyword/s', '');<br>$category = input('category/d', 0);<br>$list = User::where('status', 1)<br> ->where('nickname', 'like', "%{$keyword}%")<br> ->paginate(15, false, ['query' => ['keyword' => $keyword, 'category' => $category]]);
【不加query参数,点“下一页”后keyword字段必然清空,用户得重输一遍】
大数据量下的分页性能优化路径
第一步:关闭totalCount统计,跳过COUNT(*)全表扫描
将paginate()第二个参数设为false,并显式传入总条数(如从缓存读取或预估):
$total = cache('user_total_count') ?: Db::name('user')->count();<br>$list = Db::name('user')->paginate(20, false, [<br> 'query' => ['keyword' => $keyword],<br> 'total' => $total<br>]);
第二步:启用simple分页,去掉页码数字,只留上一页/下一页
把paginate()第二个参数改为true:
$list = Article::where('status', 1)->paginate(30, true);
第三步:为排序字段加复合索引
例如按status + create_time desc分页,就在数据库建索引:ALTER TABLE `article` ADD INDEX `idx_status_ctime` (`status`, `create_time` DESC);
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











