tp5 分页后,修改数据 ( 2 )

为什么说这是2呢,因为之前我有写过一篇 同样是tp5分页后的数据修改的文章,请参考 https://blog.csdn.net/qq_39702981/article/details/104854741
这次是采用了更加简便的方法,其实具体官方文档也有,只是官方5.0有些bug,楼主在此补充说明一下。此次补充参照tp官方论坛,非楼主发现的bug。

描述
看过之前写的那一篇的都知道,那种方法是采用 将paginate() 之后的数据 转成数组赋值给一个新的数组,然后foreach 这个新数组来修改,这样修改起来篇幅比较长,而且不好理解。所以还是老实使用官方的each来修改, 注意,tp5.0 的each 循环有bug,并不能实际修改或增加 paginate 分页后的对象数据,所以:

第一步:找到 \thinkphp\library\think\Collection.php 下面定义的 each 方法
 

    /**
     * 给每个元素执行个回调
     *
     * @param  callable $callback
     * @return $this
     */
    public function each(callable $callback)
    {
        foreach ($this->items as $key => $item) {
            if ($callback($item, $key) === false) {
                break;
            }
        }

        return $this;
    }

修改之后

    /**
     * 给每个元素执行个回调
     * @param  callable $callback
     * @return $this
     */
    public function each(callable $callback)
    {
         foreach ($this->items as $key => $item) {
            $this->items[$key] = $callback($item, $key);  // 修改之处
            if ($callback($item, $key) === false) {
                break;
            }
        }
        return $this;

    }

第二步:分页处调用(应该是 tp5.1之后each()便是修正了的,5.1以上的自动忽略第一步,如果修改或者增加失败的,请检查each())

		$list =  db('user')->paginate(20,false,['query'=>request()->param()])
								  ->each(function($item, $key){
								        // 可做其他数据库查询数据来修改 item
								        $item['age'] = 18;  
								        return $item;
    								});
        $this->assign("list",$list->all());

其实paginate分页数据修改起来还是很方便的,多点参考文档和论坛,你会成长的更快。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章