【发布时间】:2021-11-18 17:31:45
【问题描述】:
我试图在我的 excel 中导出超过 10k 的数据,但它显示超时或有时显示未达到。在excel中导出大量数据的最佳过程是什么。在我给了mtycontroller和导出代码。
控制器:
function excel(){
return (new UsersExport())->download('invoices.xlsx');
}
在导出文件夹 UsersExport.php 文件中
<?php
namespace App\Exports;
use App\Models\TEST;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\FromArray;
use Illuminate\Contracts\Queue\ShouldQueue;
class UsersExport implements FromQuery, WithMapping, WithHeadings,ShouldQueue
{
/**
* @return \Illuminate\Support\Collection
*/
use Exportable;
public function query()
{
return TEST::query()->where('status_id','!=','12');
}
public function headings(): array
{
return [
'test Id', 'test Tracking Id','test Type','customer name', 'Receiver Info','Pickup','Delivery','cash','Charge','Status','cash Payment','Paid By','Request Time','Pickup Time','Delivery Time','Time Duration'
];
}
public function map($row): array
{
if($row->delivery == '0' || empty($row->delivery)){
$delivery = (!empty($row->branch->name)?$row->branch->name:'Not Available');
}else{
$delivery=(!empty(\App\Models\Branch::find($row->delivery)->name)?\App\Models\Branch::find($row->delivery)->name:'Not Available');
}
$picks =\App\Models\TestLog::where('courier_id',$row->id)->where('status_id','13')->first();
return [
$row->id,
$row->tracking_id,
$row->test_type->title,
!empty($row->customer->name)?$row->customer->name:"Not Available",
$row->receiver_name.'-- '. $row->receiver_address .'-- '.$row->receiver_phone,
!empty($row->pickup->name)?$row->pickup->name:"Not Available",
!empty($delivery)?$delivery:"Not Available",
$row->cash,
$row->pricing->price,
$row->status->name,
$row->cash_status,
$row->paid_by,
date('d-m-Y h:i A',strtotime($row->created_at)),
!empty($picks->created_at)?date('d-m-Y h:i A',strtotime($picks->created_at)):"Not Available",
!empty($row->delivery_date)?date('d-m-Y h:i A',strtotime($row->delivery_date)):"Not Available",
$row->created_at->diffForHumans()
];
}
}
代码没问题。它在数据量较少时导出数据,但在导出大量数据时会出现问题。请如果有人可以建议我在导出大数据时如何解决这个问题
【问题讨论】:
-
这种情况下最好分段导出数据
标签: laravel laravel-5 laravel-8 maatwebsite-excel laravel-excel