分页查询
最后更新于:2022-04-02 07:51:17
## 分页实现
`ThinkPHP`内置了分页实现,要给数据添加分页输出功能变得非常简单,可以直接在`Db`类查询的时候调用`paginate`方法:
~~~
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10);
// 渲染模板输出
return view('index', ['list' => $list]);
~~~
模板文件中分页输出代码如下:
~~~html
{$list|raw}
~~~
也可以单独赋值分页输出的模板变量
~~~
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10);
// 获取分页显示
$page = $list->render();
return view('index', ['list' => $list, 'page' => $page]);
~~~
模板文件中分页输出代码如下:
~~~html
{$page|raw}
~~~
默认情况下,生成的分页输出是完整分页功能,带总分页数据和上下页码,分页样式只需要通过样式修改即可,完整分页默认生成的分页输出代码为:
~~~
~~~
如果你需要单独获取总的数据,可以使用
~~~
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id' ,'desc')->paginate(10);
// 获取总记录数
$count = $list->total();
return view('index', ['list' => $list, 'count' => $count]);
~~~
### 传入总记录数
支持传入总记录数而不会自动进行总数计算,例如:
~~~
// 查询状态为1的用户数据 并且每页显示10条数据 总记录数为1000
$list = Db::name('user')->where('status',1)->paginate(10,1000);
// 获取分页显示
$page = $list->render();
return view('index', ['list' => $list, 'page' => $page]);
~~~
>[danger] 对于`UNION`查询以及一些特殊的复杂查询,推荐使用这种方式首先单独查询总记录数,然后再传入分页方法
### 分页后数据处理
支持分页类后数据直接`each`遍历处理,方便修改分页后的数据,而不是只能通过模型的获取器来补充字段。
~~~
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate()->each(function($item, $key){
$item['nickname'] = 'think';
return $item;
});
~~~
如果是模型类操作分页数据的话,`each`方法的闭包函数中不需要使用返回值,例如:
~~~
$list = User::where('status',1)->order('id', 'desc')->paginate()->each(function($item, $key){
$item->nickname = 'think';
});
~~~
## 简洁分页
如果你仅仅需要输出一个 仅仅只有上下页的分页输出,可以使用下面的简洁分页代码:
~~~
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->order('id', 'desc')->paginate(10, true);
// 渲染模板输出
return view('index', ['list' => $list]);
~~~
简洁分页模式的输出代码为:
~~~
';
-
{volist name='list' id='user'}
- {$user.nickname} {/volist}
-
{volist name='list' id='user'}
- {$user.nickname} {/volist}
- «
- »