Laravel Excel导出关系数据

Laravel Excel导出关系数据,laravel,eloquent,laravel-excel,Laravel,Eloquent,Laravel Excel,我试图将记录导出到CSV,该CSV查询关系,但我的文件始终只返回标题 我正在使用laravel excel包来完成这项工作 控制器方法 public function export(Team $team) { return Excel::download(new TeamMembersExport(), 'team_members.csv'); } public function members(){ return User::with('games')->whereHa

我试图将记录导出到CSV,该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();
}
团队方法

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
    传递给导出,我假设这是基于controller方法的目标
  • 映射要求首先使用以下问题之一将数据填充到导出实例中:
    FromQuery
    FromCollection
    FromArray
    FromView
  • 映射应该返回一个数组,如方法签名中所示。此数组应表示导出中的一行,而不是整个查询响应

  • 好消息是,这一切都可以通过一些调整来修复

    控制器

    公共函数导出(团队$Team)
    {
    //将团队模型传递到导出中
    返回Excel::下载(新的TeamMembersExport($team),'team_members.csv');
    }
    
    导出

    //添加FromCollection关注点
    类ProviderMembersPort实现了FromCollection、WithMapping和Headers
    {
    使用可出口产品;
    //存储团队依赖项的位置
    私人团队;
    //使用构造函数处理依赖项注入
    公共职能机构(团队$团队)
    {
    $this->team=$team;
    }
    //设置要导出的成员集合
    公共功能集合()
    {
    返回$this->team->members();
    }
    //映射单个成员行的外观
    //此方法将迭代每个集合项
    公共函数映射($member):数组
    {
    返回[
    $member->name,
    $member->team_number,
    $member->出生日期,
    ];
    }
    //这很好
    公共函数标题():数组
    {
    返回[
    “姓名”,
    “团队编号”,
    “出生日期”
    ];
    }
    }
    
    施展了魅力!谢谢