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分頁數據修改起來還是很方便的,多點參考文檔和論壇,你會成長的更快。

 

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