Laravel-Excel 导出关系数据
Laravel-Excel export relationship data
我正在尝试将记录导出到查询关系的 CSV,但我的文件只返回标题。
我正在使用 laravel-excel 包来做这个。
控制器方法
public function export(Team $team)
{
return Excel::download(new TeamMembersExport(), 'team_members.csv');
}
团队方法
public function members(){
return User::with('games')->whereHas('games', function ($q) {
$q->where('team_id', $this->id);
})->get();
}
导出文件
class ProviderMembersExport implements WithMapping, WithHeadings
{
public function map($team): array
{
$members = $team->members()->only([
'name',
'team_number',
'date_of_birth'
]);
return $members->all();
}
public function headings(): array
{
return [
'Name',
'Team Number',
'Date of Birth'
];
}
}
我是不是在映射方法里面写错了?
有几个问题很突出。
- 您永远不会将
$team
传递给导出,我认为这是基于控制器方法的目标。
- 映射要求首先使用
From
关注点之一将数据填充到导出实例中:FromQuery
、FromCollection
、FromArray
、FromView
- 映射应该 return 一个数组,如方法签名中所示。此数组应代表导出中的单行,而不是整个查询响应。
好消息是,这一切都可以通过一些调整来解决。
控制器
public function export(Team $team)
{
// pass the team model into the export
return Excel::download(new TeamMembersExport($team), 'team_members.csv');
}
导出
// add FromCollection concern
class ProviderMembersExport implements FromCollection, WithMapping, WithHeadings
{
use Exportable;
// a place to store the team dependency
private $team;
// use constructor to handle dependency injection
public function __construct(Team $team)
{
$this->team = $team;
}
// set the collection of members to export
public function collection()
{
return $this->team->members();
}
// map what a single member row should look like
// this method will iterate over each collection item
public function map($member): array
{
return [
$member->name,
$member->team_number,
$member->date_of_birth,
];
}
// this is fine
public function headings(): array
{
return [
'Name',
'Team Number',
'Date of Birth'
];
}
}
我正在尝试将记录导出到查询关系的 CSV,但我的文件只返回标题。
我正在使用 laravel-excel 包来做这个。
控制器方法
public function export(Team $team)
{
return Excel::download(new TeamMembersExport(), 'team_members.csv');
}
团队方法
public function members(){
return User::with('games')->whereHas('games', function ($q) {
$q->where('team_id', $this->id);
})->get();
}
导出文件
class ProviderMembersExport implements WithMapping, WithHeadings
{
public function map($team): array
{
$members = $team->members()->only([
'name',
'team_number',
'date_of_birth'
]);
return $members->all();
}
public function headings(): array
{
return [
'Name',
'Team Number',
'Date of Birth'
];
}
}
我是不是在映射方法里面写错了?
有几个问题很突出。
- 您永远不会将
$team
传递给导出,我认为这是基于控制器方法的目标。 - 映射要求首先使用
From
关注点之一将数据填充到导出实例中:FromQuery
、FromCollection
、FromArray
、FromView
- 映射应该 return 一个数组,如方法签名中所示。此数组应代表导出中的单行,而不是整个查询响应。
好消息是,这一切都可以通过一些调整来解决。
控制器
public function export(Team $team)
{
// pass the team model into the export
return Excel::download(new TeamMembersExport($team), 'team_members.csv');
}
导出
// add FromCollection concern
class ProviderMembersExport implements FromCollection, WithMapping, WithHeadings
{
use Exportable;
// a place to store the team dependency
private $team;
// use constructor to handle dependency injection
public function __construct(Team $team)
{
$this->team = $team;
}
// set the collection of members to export
public function collection()
{
return $this->team->members();
}
// map what a single member row should look like
// this method will iterate over each collection item
public function map($member): array
{
return [
$member->name,
$member->team_number,
$member->date_of_birth,
];
}
// this is fine
public function headings(): array
{
return [
'Name',
'Team Number',
'Date of Birth'
];
}
}