美文网首页
thinkphp6使用chunk和each遇到的问题笔记!

thinkphp6使用chunk和each遇到的问题笔记!

作者: DragonersLi | 来源:发表于2021-09-14 19:43 被阅读0次

    使用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时,结果集arrayeach赋值时方法内打印有结果,外部打印为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一下
                    });
    
    
    

    有时候我们使用eachchunk处理完数据想要直接返回而不是循环赋值等操作
    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;
            }
        }
    
    

    相关文章

      网友评论

          本文标题:thinkphp6使用chunk和each遇到的问题笔记!

          本文链接:https://www.haomeiwen.com/subject/mkqqlhtx.html