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