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

Laravel Export报错:尝试读取null的second_key属性

解决Laravel Export导出时"Attempt to read property 'second_key' on null"异常

问题场景

使用Laravel Export导出数据时,代码抛出ErrorException: Attempt to read property "second_key" on null异常,相关代码如下:

<?php
namespace App\Admin\Extensions;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Facades\Excel;
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
class DataExporter extends ExcelExporter implements FromQuery, WithMapping, ShouldAutoSize
{
protected $fileName = 'Export Data.xlsx';
    public function headings(): array
    {
        return [
            'ID',
            'Title',
            'Status',
            'Gender',
            'Data',
        ];
    }
    public function map($data): array
    {
        return [
            $data->id,
            $data->title,
            $data->status,
            $data->gender,
            $data->json_data->second_key, // <-- 报错位置
        ];
    }
}

排查结果

  • 执行print_r(json_encode($data->json_data)),输出显示json_data字段包含second_key及对应值
  • 直接返回$data->json_data到Excel单元格时,能正常显示完整JSON内容,但访问$data->json_data->second_key时触发异常

解决方案

方案1:手动转换JSON字符串为对象/数组

在map方法中先将JSON字符串转换为对象或数组,同时处理可能的空值情况:

public function map($data): array
{
    // 将JSON字符串转为对象,若需要数组则第二个参数传true
    $jsonData = json_decode($data->json_data);
    
    return [
        $data->id,
        $data->title,
        $data->status,
        $data->gender,
        // 使用null安全运算符避免空值报错,空合并运算符设置默认值
        $jsonData?->second_key ?? '',
    ];
}

方案2:利用Laravel模型字段自动转换

在对应的数据模型中,通过$casts属性将json_data字段自动转换为对象或数组:

// 对应的数据模型类
class YourModel extends Model
{
    protected $casts = [
        'json_data' => 'object', // 或 'array',根据需求选择
    ];
}

设置后,从数据库取出数据时json_data会自动转为对象/数组,此时可直接访问属性,但仍建议保留空值处理:

$data->json_data?->second_key ?? ''

原因说明

直接返回$data->json_data能显示完整JSON,是因为Laravel会自动将字符串类型的JSON字段转为可打印的内容,但此时该字段本质仍是字符串而非对象/数组。尝试用对象属性访问符->读取字符串的"属性"时,PHP会将字符串视为非对象类型,进而触发"读取null属性"的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:05:49