ThinkPHP 中 paginate 分页需调用模型或 Db 的 paginate() 方法,返回 Paginator 对象,含数据列表和分页信息;模板中用 render() 渲染,默认带 Bootstrap 样式,支持 simple() 简洁模式及自定义参数如 list_rows、var_page、query 等。

ThinkPHP 中使用 paginate 做分页查询非常简单,核心是调用模型或查询构造器的 paginate() 方法,框架会自动处理总记录数、当前页、每页数量,并生成分页对象。
基础用法:直接调用 paginate()
在控制器中,对模型或 Db 查询直接调用 paginate() 即可:
// 方式1:使用模型(推荐)
$users = User::where('status', 1)->paginate(10);
<p>// 方式2:使用 Db 类
$users = Db::name('user')->where('status', 1)->paginate(10);</p><p>// 方式3:指定参数更灵活(每页15条,当前第2页)
$users = User::paginate([
'list_rows' => 15,
'page' => 2,
]);
</p>返回的 $users 是一个 Paginator 对象,既包含数据列表($users->items()),也包含分页信息(如总页数、当前页、上一页/下一页链接等)。
模板中渲染分页(含默认样式)
在 ThinkPHP 模板(如 index.html)中,用 render() 输出分页 HTML:
<!-- 显示用户列表 -->
{volist name="users" id="user"}
<p>{$user.name} - {$user.email}</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站"><img
src="https://img.php.cn/upload/skill/000/000/081/179040786932301.jpg" alt="btpanel phpsite 宝塔面板PHP网站" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="overflowclass">btpanel phpsite 宝塔面板PHP网站</a>
<p class="overflowclass">宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理</p>
</div>
<a rel="nofollow" href="/xiazai/skill5233" title="btpanel phpsite 宝塔面板PHP网站" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
{/volist}
<p><!-- 渲染分页栏(自动带链接和样式)-->
{$users->render()}
</p>默认会输出带 Bootstrap 兼容样式的分页 HTML。如需自定义样式,可传入参数或使用 simple() 简洁模式:
{$users->simple()->render()} <!-- 上一页/下一页按钮,无页码数字 -->
自定义分页参数与 URL
常见需求如修改每页数量、指定当前页变量名、适配 RESTful 路由等,可通过数组参数控制:
-
修改每页条数:
['list_rows' => 20] -
指定当前页参数名(如用
p替代默认page):['var_page' => 'p'] -
手动设置当前页:
['page' => input('p/d', 1)] -
保持 URL 参数(如搜索关键词):
['query' => request()->param()],这样翻页时不会丢失?keyword=xxx
配合条件查询与字段限制
paginate() 支持链式调用,所有 where、field、order 等方法都可在其前使用:
$users = User::where('status', 1)
->field('id,name,email,create_time')
->order('create_time DESC')
->paginate(12);
注意:不要在 paginate() 后再调用 select() 或 find(),否则会报错——分页本身就是一次完整查询。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










