maatwebsite/excel使用:导出——映射数据
映射数据
映射行
通过添加 WithMapping
,你可以映射需要作为行添加的数据。这样您就可以控制每列的实际来源。如果使用 Eloquent 查询构建器:
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithMapping;
class InvoicesExport implements FromQuery, WithMapping
{
/**
* @var Invoice $invoice
*/
public function map($invoice): array
{
return [
$invoice->invoice_number,
$invoice->user->name,
Date::dateTimeToExcel($invoice->created_at),
];
}
}
多行
你还可以在 map
函数中返回多行:
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithMapping;
class InvoicesExport implements FromQuery, WithMapping
{
/**
* @var Invoice $invoice
*/
public function map($invoice): array
{
// This example will return 3 rows.
// First row will have 2 column, the next 2 will have 1 column
return [
[
$invoice->invoice_number,
Date::dateTimeToExcel($invoice->created_at),
],
[
$invoice->lines->first()->description,
],
[
$invoice->lines->last()->description,
]
];
}
}
添加标题行
通过添加 WithHeadings
可以轻松添加标题行。标题行将添加为工作表的第一行。
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class InvoicesExport implements FromQuery, WithHeadings
{
public function headings(): array
{
return [
'#',
'User',
'Date',
];
}
}
如果需要有多个标题行,可以从 headings()
方法返回多行:
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class InvoicesExport implements FromQuery, WithHeadings
{
public function headings(): array
{
return [
['First row', 'First row'],
['Second row', 'Second row'],
];
}
}
准备行
如果需要在将这些行附加到工作表之前准备行,可以将方法 prepareRows
添加到导出类。在展开查询输出并调用 map()
之前,将调用此方法。
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithHeadings;
class UsersExport implements FromQuery, WithHeadings
{
public function prepareRows($rows)
{
return $rows->transform(function ($user) {
$user->name .= ' (prepared)';
return $user;
});
}
}
本作品采用《CC 协议》,转载必须注明作者和本文链接