ThinkPHP5 随笔(一)

今天在写分页的时候发现按照官方文档上的写法是执行不了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 文件。

ThinkPHP5 随笔(一)_第1张图片
找到第195行

在each函数内添加一句

$this->items[$key] = $callback($item, $key);


ThinkPHP5 随笔(一)_第2张图片
改完之后的样子

改完之后运行后发现each函数内方法可以运行了!Good!

但是运行之后还是有个问题,分页的数据少了一个 last_page ,原来的数据是


ThinkPHP5 随笔(一)_第3张图片
这个

total 总数据量

per_page 每页数据量

current_page 当前页码

last_page 最后页码

找到源码,在 thinkphp\library\think\paginator 内,也是 Collection.php 文件。


ThinkPHP5 随笔(一)_第4张图片
第52行的函数

return只返回了四个参数。机智的我使用编译器的全目录搜索工具,搜索 lastPage


ThinkPHP5 随笔(一)_第5张图片
找到了


ThinkPHP5 随笔(一)_第6张图片

既然有这个方法,说明这个参数应该是可以用的,于是在刚刚找到的函数中添加一句

'last_page' => $this->lastPage(),


ThinkPHP5 随笔(一)_第7张图片
效果图

保存运行之后


ThinkPHP5 随笔(一)_第8张图片
完美

OK!就是这样啦!ThinkPHP5的分页问题就这样解决了!

ThinkPHP5 随笔(一)_第9张图片

你可能感兴趣的:(ThinkPHP5 随笔(一))