laravel-admin自带的导出excel会导出与此模型关联的其他数据。所以参考官方文档调整代码
文章表:id,title,user_id
用户表:id,username
//文章模型关联用户 public function user(){ return $this->belongsTo(User::class, 'user_id', 'id'); }
//ExcelExporter.php <?php namespace AppAdminExtensions; use EncoreAdminGrid; use EncoreAdminGridExportersAbstractExporter; use MaatwebsiteExcelFacadesExcel; 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);