laravel excel 3.* 的导出简单分享

原因

以前我们都是使用的laravel excel 2.1的,然后我新弄了个项目,我想着使用excel 3.*的试一试吧,然后遇到了一些坑的地方,有好有坏,简单分享下
文档地址laravel-excel3.1
过程
php artisan make:export UsersExport --model=User

第一种方法,很不自在
<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

class LogExport implements FromCollection,WithHeadings
{
    use Exportable;

    private $data;
    private $headings;

    //数据注入
    public function __construct($data, $headings)
    {
        $this->data = $data;
        $this->headings = $headings;
    }

    //实现FromCollection接口
    public function collection()
    {
    	//文档这个地方是查询的方法,我移动到了外面,其实是一样的道理
        return collect($this->data);
    }

    //实现WithHeadings接口
    public function headings(): array
    {
        return $this->headings;
    }

}

<?php
namespace App\Http\Controllers;

use App\Exports\LogExport;
use App\Services\LogService;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;

class LogController extends Controller
{
	public function aaa()
	{
		$fileName = '各事业部登录人数.xlsx';
		$data = (new LogService())->exportApiRecord(); //这个我写的service 写了好多逻辑,读出来的数据
		
	    return Excel::download(new LogExport($data['data'], $data['headings']), $fileName);
	}
}

第二种更加灵活,我是看见了laravel-admin 的代码给我的启发
<?php

namespace App\Exports;

use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\WithHeadings;

class LogExport implements FromCollection,WithHeadings
{
    use Exportable;

    private $data;

    //数据注入
    public function __construct($data)
    {
        $this->data = $data;
    }

 protected $columns = [
        'id'                    => 'ID',
        'name'                  => '姓名',
        'status'                => '状态',
    ];

    //实现FromCollection接口
    public function collection()
    {
    	//文档这个地方是查询的方法,我移动到了外面,其实是一样的道理
        return collect($this->data);
    }

    //实现WithHeadings接口
    public function headings(): array
    {
        return $this->columns;
    }

}
    public function map($user) : array
    {
        return [
            $user->id,
            $user->name,
            $user->status ? 'yes' : 'no';           // 字段数据替换
        ];
    }
}

第二种使用的是map 重新整理字段,这样更加灵活,多了字段也不怕
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值