You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel导出Excel时如何获取多关联表数据及对应用户名称

解决方案

你原有代码无法导出关联数据的核心原因是:FromCollection 直接返回嵌套关联的模型集合时,Maatwebsite Excel 不会自动展开嵌套的关联字段,也不会自动将一对多的关联拆分为多行记录,需要手动将数据拍平处理。

修改后的 AccessoryRequestExport 代码

<?php

namespace App\Exports;

use App\AccessoryRequest;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\WithHeadings;

class AccessoryRequestExport implements FromArray, WithHeadings
{
    public function array(): array
    {
        $exportData = [];
        // 预加载关联避免N+1查询
        $accessoryRequests = AccessoryRequest::with(['user', 'details'])->get();

        foreach ($accessoryRequests as $request) {
            // 遍历单条申请单下所有关联详情,每条详情生成一行导出数据
            foreach ($request->details as $detail) {
                $exportData[] = [
                    $request->id,
                    $request->user->user_name ?? '', // 替换user_id为用户名称
                    $request->store_id,
                    $request->request_date,
                    $request->status,
                    $request->created_at,
                    $request->updated_at,
                    $detail->accessory_request_id,
                    $detail->vendor_id,
                    $detail->barcode,
                    $detail->description,
                    $detail->qty,
                    $detail->status
                ];
            }
        }

        return $exportData;
    }

    public function headings(): array
    {
        return [
            '申请单ID',
            '申请人名称',
            '门店ID',
            '申请日期',
            '申请单状态',
            '创建时间',
            '更新时间',
            '关联申请单ID',
            '供应商ID',
            '条码',
            '配件描述',
            '数量',
            '详情状态'
        ];
    }
}

效果说明

  1. 一对多关联导出:每条配件详情会单独生成一行记录,同一配件申请单的多条详情会对应多行,主表信息同步展示在对应详情行,符合常规导出需求。
  2. 用户名替换:原user_id字段已经替换为user表对应的user_name值,空值判断避免关联数据不存在时报错。

控制器代码无需修改,直接使用原有逻辑即可正常导出。


内容的提问来源于stack exchange,提问作者Coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:15:03