今天做項目遇到分頁後要對數據做統計的情況。直接進入正題吧。
對於paginate()分頁後的數據直接進行修改報如下錯誤
Indirect modification of overloaded element of think\paginator\driver\Layui has no effect
查手冊,官方表示這樣解決,
$list = Db::name('user')->where('status',1)->paginate()->each(function($item, $key){
$item['nickname'] = 'think';
return $item;
});
然並卵,經過官方手冊之後報錯,render未定義方法
PHP Fatal error: Call to undefined method think\Collection::render()
結合網友經驗,實際還是有人解決了的,但是重點不夠突出,看了之後可能還是會踩坑。下面結合我的實際代碼分享一下重點:
$user = Session::get('user_info');
// 根據我的id查找我的好友
$friendList = db('account')->alias('a')
->join('Member b','b.aid = a.id')
->where('a.from_id',$user['id'])
->field('a.id,a.from_id,a.account,b.username')
->paginate(20);
$friendListAll = $friendList->all(); //【重點】 將分頁數據轉成實際數據數組,否則不能修改
foreach ($friendListAll as $k => $v)
{
$info = db('recommend_reward')->where(['aid'=>$user['id'],'from_id'=>$v['id']])->select();
$v['add'] = 0;
for ($j=0; $j < count($info) ; $j++)
{
$v['add'] += $info[$j]['reward']; // 累計每個用戶的獎勵
}
// 【重點】往 friendList 變量追加 add 字段,$friendList[$k]['add'] =$v;或者$friendList[$k]['add'] =$v['add'];都是錯誤的,會導致Layui has no effect錯誤
$friendList[$k] =$v;
}
$this->assign("page", $friendList->render());
【重點】註釋的兩大步是關鍵點,希望能幫到Phper們。