数据导出

未匹配的标注

框架提供了基础的数据导出功能, 可以很方便的实现导出数据到 .xlsx 文件

此功能依赖于 laravel-excel ( maatwebsite/excel )
如果 maatwebsite/excel 安装时报错, 请先安装 psr/simple-cache:^2.0
相关 issue


使用

// 在列表工具栏添加导出按钮
public function list(): Page
{
    $crud = $this->baseCRUD()
        ->headerToolbar([
            $this->createButton(),
            ...$this->baseHeaderToolBar(),
            // 添加导出按钮
            $this->exportAction(),
        ])
        ->columns([
            // ...
        ]);

    return $this->baseList($crud);
}


部分自定义配置

导出文件名

// 在控制器中重写 exportFileName 方法
protected function exportFileName()
{
    return '此处为导出文件名';
}


表头

// 在控制器中重写 exportHeadings 方法
protected function exportHeadings()
{
    return [
        '姓名',
        '年龄',
        '性别',
        '...'
    ];
}


导出列

// 在控制器中重写 exportColumns 方法
protected function exportColumns($row)
{
    return [
        $row->name,
        $row->age,
        // 可以在这里自定义处理数据, 如:
        $row->gender == 1 ? '男' : '女',
    ];
}


完整自定义

如果以上配置不能满足你的需求, 你可以重写 export 方法, 自定义导出逻辑

// 在控制器中重写 export 方法
// 此方法在 index() 中被调用, 当请求参数 _action=export 时
protected function export()
{
    // 默认在 storage/app/ 下
    $path = sprintf('%s-%s.xlsx', $this->exportFileName(), date('YmdHis'));

    // 导出本页和导出选中项都是通过 _ids 查询
    $ids = request()->input('_ids');

    // listQuery() 为列表查询条件,与获取列表数据一致
    $query = $this->service->listQuery()->when($ids, fn($query) => $query->whereIn('id', explode(',', $ids)));

    // 此处使用 laravel-excel 导出,可自行修改
    AdminExport::make($query)
        ->setHeadings($this->exportHeadings())
        ->setMap(fn($row) => $this->exportColumns($row))
        ->store($path);

    return $this->response()->success(compact('path'));
}




😏建议在使用前通读并背诵相关文档: laravelamis ~

常见问题参见 issue

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~