Laravel:将查询数据导出为Excel(替换原PDF导出功能)
把Laravel查询数据导出为Excel替代PDF的解决方案
没问题,咱们直接把你的PDF导出逻辑改成Excel导出就行,Laravel生态里最常用的Excel处理工具是Maatwebsite/Laravel-Excel,步骤很清晰:
第一步:安装Laravel Excel包
首先在项目根目录运行Composer命令安装包:
composer require maatwebsite/excel
(Laravel 9+版本会自动完成服务提供者注册,低版本可能需要手动在config/app.php里配置,不过现在新版本基本都自动处理了)
第二步:创建导出类
用Artisan命令生成一个专门的导出类,这个类负责定义Excel的表头和要导出的数据:
php artisan make:export UsageDataExport
生成的文件在app/Exports/UsageDataExport.php,修改它的内容如下:
<?php namespace App\Exports; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\FromCollection; use Maatwebsite\Excel\Concerns\WithHeadings; class UsageDataExport implements FromCollection, WithHeadings { protected $particulars; // 构造函数接收查询到的数据 public function __construct(Collection $particulars) { $this->particulars = $particulars; } // 返回要导出的数据集 public function collection() { return $this->particulars; } // 设置Excel表头 public function headings(): array { return [ 'Item Name', 'Unit', 'Price', 'Quantity Issued', 'Total Cost' ]; } }
第三步:修改控制器代码
现在把你原来的PDF导出逻辑替换成Excel导出,记得导入必要的命名空间:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; // 导入Excel facade和咱们的导出类 use Maatwebsite\Excel\Facades\Excel; use App\Exports\UsageDataExport; class YourControllerName extends Controller // 替换成你的实际控制器名 { public function getUsageData(Request $request) { $start_date = $request->get('start_date'); $end_date = $request->get('end_date'); $particulars = DB::table('particulars') ->join('reqs', 'particulars.particular_id', "=", 'reqs.particular_id') ->whereBetween('date_applied', [$start_date, $end_date]) ->select('particulars.item_name', 'particulars.unit', 'particulars.price', 'reqs.quantity_issued', DB::raw('particulars.price*reqs.quantity_issued AS total_cost')) ->get(); if ($particulars->isEmpty()) { return "No Records Found...................... "; } else { // 替换PDF导出为Excel下载 return Excel::download(new UsageDataExport($particulars), 'usage_report.xlsx'); } } }
这样修改后,用户请求这个接口时,就会自动下载一个名为usage_report.xlsx的Excel文件,里面包含你查询到的所有数据和自定义的表头。
内容的提问来源于stack exchange,提问作者fetty
相关产品推荐
相关产品推荐

