thinkphp6使用chunk和each遇到的问题笔记!
2021-09-14 本文已影响0人
DragonersLi
使用
mysql
模型时,结果集可直接赋值不用return
$status = Withdraw::$status;
return Withdraw::where(['user_id'=>$id])
->order("id desc")
->paginate(self::$limit)
->each(function($item) use($status) {
$item->status_desc = $status[$item->status];
});
使用
mongodb
时,结果集array
,each
赋值时方法内打印有结果,外部打印为NULL
,此时必须return
数组里每个元素才有结果
Db::connect('mongo')
->table("team_award_2021" )
->withoutField('_id')
->where(['uid' => $uid])
->order('id', 'desc')
->select()
->each(function ($item, $key) use ($cycle) {
$item['team_level'] = UserTeamAwardModel::getCurrentLevel($item['team_money']);
return $item; //如果结果集是数组,则要return一下
});
有时候我们使用
each
或chunk
处理完数据想要直接返回而不是循环赋值等操作
则use
一个地址引用变量&
,内部处理结果,外部直接可用。
each
UserModel::where("id<550")->select()->each(function($item) use(&$arr){
$arr[] = $item['id'];
});
chunk
UserModel::where("id<550")->chunk(100,function($item) use(&$arr){
foreach(self::generateData($item) as $k=>$v){
$arr[] = $v['id'];
}
});
/**
* 生成器
* @param array $data
* @return \Generator
*/
public static function generateData($data = [])
{
foreach($data as $k=>$v){
yield $v;
}
}