laravel中查询构建器里关于分页的两种常用用法

13 篇文章 0 订阅

背景:在使用laravel查询构建器之后

           关于分页自己常用的两种方法

 

第一种:只有分页

$sql -> offset($params['start'])->limit($params['length']);

通过偏移(offset)和限制(limit)来实现分页 , 

offset   表示   当前页数

limit     表示    每页条数

但是这种方法我们需要再加一个接口来获取总条数

 

第二种:返回分页后的数据和总条数

第二种可以在分页后获取到数据的同时,也返回总条数

语法:paginate(int $perPage, array $columns, string $pageName, int|null $page) 

int $perPage:每页几条

array $columns:返回的字段数组。

string $pageName:分页字段名(无特殊要求我都是命名为page)

int|null $page:第几页

paginate(3,['rb_order_id'],'page',2);

!!!数据处理:如果还需要重新封装,只获取其中的某些数据的话。

                    也可以通过$res->toArray()转为数组,或者$res->toJson()转为json串,
                    个人偏向转为json比较多,所以常用$res->toJson()

                    然后通过    $res['total'](数组) 或者  $res->total(json串) 这样的形式读取其中某些数据,再进行处理 

 

 

!!补充:如果是转换为json串的话,之后可能会用到json_decode()来处理数据,这里要注意一点

通过var_dump查看数据不难发现:

一般我们在laravel中从数据库拿回来的结果集都是object对象

而在json_decode()这个函数中,加了true不加true后出来的数据完全是不一样的

json_decode($json):返回的是object对象

json_decode($json,true):返回的是array数组

从网上查到的方法是 用get_object_varsobject对象转换成数组 然后在用foreach  遍历即可

$array = get_object_vars($test);

如果不转为数组

 

如果要用方法二的同时也返回指定字段,可以先select查出指定字段再分页

$res =  $sql -> select('a.*','b.real_name','b.member_rank_id','bb.quantity')
	     -> paginate($params['length'],['a.order_id'],'page',$params['start'])
	     ->	toJson();

这时候肯定有疑问,上面不是说paginate第二个字段就可以查指定字段,

的确可以,如果前面没有select的话,不过这个仅限于你要查一个字段,如果查多个会报错

在代码过程中,我发现select查的是指定字段,而paginate第二个字段相当于count('a.order_id')查条数total

也就是下面我的三行代码中,laravel其实执行了两次,一次是查select的指定字段,另一次则是查count(*)总条数

也就是paginate中第二个字段其实是在count()的查询中

如果要查多个的话 ,目前个人只发现用select再分页的方法,如果有其他欢迎补充

 

 

返回的结果如下

{
"current_page":2,//当前页数
"data":[//分页返回的结果集
{
"rb_order_id":"JH2019061512443644075"
},
{
"rb_order_id":"JH2019061514425714187"
},
{
"rb_order_id":"JH2019061515145214447"
}
],
"first_page_url":"http:\/\/localhost\/laravel57\/public\/index.php\/orderData?Eahon=1",
"from":4,
"last_page":3,//最后一页的页数
"last_page_url":"http:\/\/localhost\/laravel57\/public\/index.php\/orderData?Eahon=3",
"next_page_url":"http:\/\/localhost\/laravel57\/public\/index.php\/orderData?Eahon=3",
"path":"http:\/\/localhost\/laravel57\/public\/index.php\/orderData",
"per_page":3,//总共几页
"prev_page_url":"http:\/\/localhost\/laravel57\/public\/index.php\/orderData?Eahon=1",
"to":6,
"total":8//总数据数
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值