今天在写分页的时候发现按照官方文档上的写法是执行不了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 文件。
找到第195行在each函数内添加一句
改完之后的样子$this->items[$key] = $callback($item, $key);
改完之后运行后发现each函数内方法可以运行了!Good!
但是运行之后还是有个问题,分页的数据少了一个 last_page ,原来的数据是
这个total 总数据量
per_page 每页数据量
current_page 当前页码
last_page 最后页码
找到源码,在 thinkphp\library\think\paginator 内,也是 Collection.php 文件。
第52行的函数return只返回了四个参数。机智的我使用编译器的全目录搜索工具,搜索 lastPage
找到了既然有这个方法,说明这个参数应该是可以用的,于是在刚刚找到的函数中添加一句
效果图'last_page' => $this->lastPage(),
保存运行之后
完美OK!就是这样啦!ThinkPHP5的分页问题就这样解决了!
网友评论