需求分析
laravel-admin是自带导出功能的,但是并不是能够符合我们的需求,
首先它导出的时候,文件的名字,是以当前列表查询的主表为名字
其次,字段也不是中文的,那么就需要我们通过compose去安装工具来实现这个功能,
当让,用原生的php去实现也是可以的!
安装
composer require maatwebsite/excel:~3.1.0
使用
在Admin文件夹下新建一个文件夹,用来存放导出各个列表的导出文件
以用户列表的导出为例子,新建导出类UserExport.php 代码内容如下:
代码的注释会写在代码旁边
<?php
namespace App\Admin\Exports;
use App\Enum\PositionStatus;
use App\Enum\UserEnum;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class UserExport extends ExcelExporter implements WithMapping, WithHeadings, ShouldAutoSize
{
//这里是导出来的文件的名字和格式
protected $fileName = '用户列表.xlsx';
//这里是excel的标题
public function headings(): array
{
return [
'编号',
'会员账号',
'会员名称',
'代理名称',
'金额',
'来源',
'所属管理员',
'认证',
'是否允许开仓',
'创建时间'
];
}
public function map($user): array
{ //这里是字段的值 如果是主表的数据 直接对象的形式就可以写出来
//如果是关联的表的数据 可以通过data_get()去渲染
//其他部分是枚举类字段值的语义化
return [
$user->id,
$user->user_name,
$user->name,
data_get($user, 'agent.name'),
data_get($user, 'agent.money'),
UserEnum::TYPE[$user->type],
data_get($user, 'admin.username'),
UserEnum::REAL_NAME_VERIFY[$user->real_name_verify],
PositionStatus::OPEN_PERMISSION[$user->open_permission],
$user->create_at
];
}
}
那么导出文件就写完了,那么如何在列表页面如何调用呢
只需要在用户列表的方法下多加一句话
$grid->exporter(new UserExport());
至此,导出功能就完成了
更多配置请戳官方文档:
https://docs.laravel-excel.com/3.1/exports/export-formats.html
觉得有用的点个赞加个关注吧!
有问题的欢迎在评论区留言!