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时,结果集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;
        }
    }

上一篇下一篇

猜你喜欢

热点阅读