一、问题描述:我们用Thinkphp5开发功能的时候框架自带的查询方法不太好使用类似于连接查询和复制的sql语句,这是我们就需要用到原生sql语句查询数据。但是使用原生sql语句查询的方式就无法使用框架自带的通过实例化数据表db()来调用分页函数。因此我们就要其他的方式来实现分页功能了。
二、实现方法:
1.引入框架自带的分类方法类Bootstrap:use thinkpaginatordriverBootstrap;
2.获取要分页的数据参数:获取当前页码、每页显示条数、查询偏移值、分页数据列表、分页的总条数,然后把参数传递到Bootstrap类中。
public function technique(){
$pageNumber = input('page') ? input('page') : '0';//客户端传过来的分页
if($pageNumber > 0){
$pageNumber_one = $pageNumber-1;
} else {
$pageNumber_one = 0;
}
$limit = 5;//每页显示条数
$offset = $pageNumber_one * $limit;//查询偏移值
//查询数据
$sql = "select a.id,a.parent_id,a.title,a.abstract,a.browse_num,a.evaluate_num,a.love_num,a.thumbnail,a.update_time,b.title as article_type
from bl_article as a
left join bl_article_type as b
on a.parent_id=b.id
limit $offset,$limit
";
$list = db()->query($sql);
//查询的总条数
$sql = "select count(*) as count_num
from bl_article as a
left join bl_article_type as b
on a.parent_id=b.id
";
$counts = db()->query($sql);
$count = $counts['0']['count_num'];
//组合分页数据格式
$pagernator = Bootstrap::make($list,$limit,$pageNumber,$count,false,['path'=>Bootstrap::getCurrentPath(),'query'=>request()->param()]);
$page = $pagernator->render();
$this->assign('article_data',$list);
$this->assign('page', $page);
return $this->fetch('Index/technique');
}
3.前端页面渲染出数据列表和分页就可以了。
4.效果图: