laravel-admin 自定义导出表单

官方导出文档

laravel-admin自带的导出excel会导出与此模型关联的其他数据。所以参考官方文档调整代码

文章表:id,title,user_id

用户表:id,username

//文章模型关联用户
    public function user(){
        return $this->belongsTo(User::class, 'user_id', 'id');
    }

 

//ExcelExporter.php
<?php
namespace App\Admin\Extensions;

use Encore\Admin\Grid;
use Encore\Admin\Grid\Exporters\AbstractExporter;
use Maatwebsite\Excel\Facades\Excel;

class ExcelExpoter extends AbstractExporter
{
    protected $head = [];
    protected $body = [];
    public function setAttr($head, $body){
        $this->head = $head;
        $this->body = $body;
    }

    public function export()
    {
        Excel::create('Filename', function($excel) {
            $excel->sheet('Sheetname', function($sheet) {
                // 这段逻辑是从表格数据中取出需要导出的字段
                $head = $this->head;
                $body = $this->body;
                $bodyRows = collect($this->getData())->map(function ($item)use($body) {
                    foreach ($body as $keyName){
                        $arr[] = array_get($item, $keyName);
                    }
                    return $arr;
                });
                $rows = collect([$head])->merge($bodyRows);
                $sheet->rows($rows);
            });
        })->export('xls');
    }
}

使用方法:

            $excel = new ExcelExpoter();
            $excel->setAttr(['id', '标题', '作者'], ['id', 'title', 'user.username']);
            $grid->exporter($excel);

 

posted @ 2018-04-27 14:03  limes  阅读(5421)  评论(0编辑  收藏  举报