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');
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城狮的梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值