美文网首页我爱编程
ThinkPHP5 随笔(一)

ThinkPHP5 随笔(一)

作者: 烦热海 | 来源:发表于2018-06-21 22:47 被阅读0次

    今天在写分页的时候发现按照官方文档上的写法是执行不了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的分页问题就这样解决了!

    相关文章

      网友评论

        本文标题:ThinkPHP5 随笔(一)

        本文链接:https://www.haomeiwen.com/subject/oowoxftx.html