带你体验一下laravel8的优雅!!!
需求:导出按条件搜索出的数据
背景介绍:使用laravel8框架,laravel-excel扩展,实现excel导出
特点:减少了控制器中的代码量,基于框架自带的功能,实现需求
使用composer命令,安装laravel-excel扩展
composer require "maatwebsite/excel:~2.1.0"
php artisan make:export ProjectExport --model=Project
参数:
ProjectExport:脚本名(或者说是新生成的脚本文件名)
--model:引用的model
执行完上面的命令后,会在app/Exports目录下,新建对应的excel导出脚本。
<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromArray; // 指定使用数组结构
use Maatwebsite\Excel\Concerns\WithMapping; // 设置excel中每列要展示的数据
use Maatwebsite\Excel\Concerns\WithHeadings; // 设置excel的首行对应的表头信息
use Illuminate\Contracts\Support\Responsable;
use Maatwebsite\Excel\Concerns\Exportable;
class FinancialProjectExport implements FromArray, WithMapping, WithHeadings, Responsable
{
use Exportable;
protected $data;
private $fileName;
public function __construct(array $data)
{
$this->data = $data; // 实例化该脚本的时候,需要传入要导出的数据
$this->fileName = date('YmdHis') . '_Financial_project.xlsx'; // 指定导出的文件名
}
public function array(): array // 返回的数据
{
return $this->data;
}
public function map($value): array // 指定excel中每一列的数据字段
{
return [
$value['business_principal_name'],
$value['income_team'],
$value['income_group'],
];
}
public function headings(): array // 指定excel的表头
{
return [
'年份',
'月份',
'立项日期',
];
}
}
经过上面三步的准备工作,接下来就是收获的时候了,在控制器中新建方法,记得要引入导出脚本哦。
use App\Exports\FinancialProjectExport;
public function exportLists(Request $request)
{
$data = Project::ofQuery($request->all())->get()->toArray(); // 查询要导出的数据
return new FinancialProjectExport($data); // 只需要把要导出的数据传到脚本中,就不导出excel了。
}