laravel下数据分段导出

最近要导出一批日志数据,正常的流程是从数据库取出数据。循环遍历处理数据得到结果,导出到excel。

貌似流程很完美,没有问题,但是数据量过大的时候,就会出现内存不够用的情况。这种情况只能把数据分段取出处理。

laravel已经给我们提供了这样的功能,下面我们来实现吧。

        $num = 500; //分段数量

        $publishData =[];
        $publishObj =  PublishLog::where('id','>',0)->orderBy('id','asc');
        if($publishObj->count() > 0){
              $publishObj->chunk($num, function ($publishLog) use (&$publishData) {
               $logData = $publishLog->toArray();
               if(count($logData) > 0){
                   foreach ($logData as $v) {
                       if(!isset($publishData[$v['company_name'].$v['product_name'].$v['create_day']])){
                           $publishData[$v['company_name'].$v['product_name'].$v['create_day']]['时间'] = $v['create_day'];
                           $publishData[$v['company_name'].$v['product_name'].$v['create_day']]['发布次数'] = 1;
                       }else{
                           $publishData[$v['company_name'].$v['product_name'].$v['create_day']]['发布次数'] += 1;
                       }

                   }
               }
           });
        } else{
            $publishData['test']['时间'] = null;
            $publishData['test']['发布次数'] = null;
        }

     //导出

 Excel::create('日志记录', function ($excel) use ($publishData) {
        $excel->sheet('发布记录', function ($sheet) use ($publishData) {
            $sheet->fromArray($publishData);
        });

    })->export('xls');
 

你可能感兴趣的:(php开发,工作笔记)