首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-Excel导出关系数据

Laravel-Excel导出关系数据
EN

Stack Overflow用户
提问于 2021-05-06 16:00:53
回答 1查看 3.8K关注 0票数 0

我试图将记录导出到CSV,CSV查询关系,但我的文件一直只返回标题。

我正在利用laravel软件包来做这件事。

控制器方法

代码语言:javascript
复制
public function export(Team $team)
{
    return Excel::download(new TeamMembersExport(), 'team_members.csv');
}

团队方法

代码语言:javascript
复制
public function members(){
    return User::with('games')->whereHas('games', function ($q) {
        $q->where('team_id', $this->id);
    })->get();
}

导出文件

代码语言:javascript
复制
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'
        ];
    }
}

我是不是在映射方法中写错了这个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-07 01:05:33

有几个突出的问题。

您从未将method.

  • Mapping传递给导出的
  1. ,我认为这是基于控制器$team的目标,它要求首先使用From关注点之一将数据填充到导出实例中:FromQueryFromCollectionFromArrayFromView
  2. Mapping应该返回数组,如方法签名中所示。这个数组应该表示导出中的一行,而不是整个查询响应。

好消息是,这一切都是可以通过一些调整来解决的。

控制器

代码语言:javascript
复制
public function export(Team $team)
{
    // pass the team model into the export
    return Excel::download(new TeamMembersExport($team), 'team_members.csv');
}

出口

代码语言:javascript
复制
// 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'
        ];
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67421841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档