今天在写分页的时候发现按照官方文档上的写法是执行不了each函数的
官方文档内容:
$list = User::where('status',1)->paginate()->each(function($item, $key){
$item->nickname = 'think';
});
自己写的内容:
$res = Db::name('order o')
->join('require r','o.require_id = r.id','left')
->where($where)
->order('o.require_id desc,o.create_time desc')
->field('o.id oid,o.order_id,o.order_status,o.require_id rid,o.total_money,o.create_time')
->paginate($row,false,[$page])
->each(function($item, $key){
$payInfo = Db::name('pay_record')->field('id')->where('order_id',$item['order_id'])->find();
if($payInfo) $item['pid'] = $payInfo['id'];
else $item['pid'] = 0;
$item = unix_time($item,'create_time',1);
return $item;
});
在网上搜索之后,有人说是修改框架底层代码,于是打开 thinkphp\library\think 目录下的 Collection.php 文件。
![](https://img.haomeiwen.com/i10898393/51e2570c7352196a.png)
在each函数内添加一句
$this->items[$key] = $callback($item, $key);
![](https://img.haomeiwen.com/i10898393/cdf06b11d4625be8.png)
改完之后运行后发现each函数内方法可以运行了!Good!
但是运行之后还是有个问题,分页的数据少了一个 last_page ,原来的数据是
![](https://img.haomeiwen.com/i10898393/457abf1e10917e6c.png)
total 总数据量
per_page 每页数据量
current_page 当前页码
last_page 最后页码
找到源码,在 thinkphp\library\think\paginator 内,也是 Collection.php 文件。
![](https://img.haomeiwen.com/i10898393/894f54e27f3e2f77.png)
return只返回了四个参数。机智的我使用编译器的全目录搜索工具,搜索 lastPage
![](https://img.haomeiwen.com/i10898393/c29ae36d975fef1b.png)
![](https://img.haomeiwen.com/i10898393/d0d5853e4ed894db.png)
既然有这个方法,说明这个参数应该是可以用的,于是在刚刚找到的函数中添加一句
'last_page' => $this->lastPage(),
![](https://img.haomeiwen.com/i10898393/40d5b3f7fc4c7afe.png)
保存运行之后
![](https://img.haomeiwen.com/i10898393/2031f06b5377cef7.png)
OK!就是这样啦!ThinkPHP5的分页问题就这样解决了!
![](https://img.haomeiwen.com/i10898393/10c8886b6641654f.png)
网友评论