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