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

Laravel报错:Trying to get property 'AccmId' of non-object 技术求助

问题解决:Trying to get property 'AccmId' of non-object

错误原因

报错核心是$result['accm_sys_detail']不是有效对象——它要么是null(上游查询未找到对应数据),要么是数组格式(而非对象),甚至可能不存在这个数组键。

解决步骤

1. 先确认变量真实结构

在报错代码前添加调试代码,明确$result['accm_sys_detail']的实际值:

@php
dd($result['accm_sys_detail']); // 输出变量结构,刷新页面查看具体内容
@endphp
  • 如果输出null:检查上游获取accm_sys_detail的逻辑,确保查询能返回有效数据(比如用Eloquent的firstOrFail()替代first(),或者提前处理空数据场景)。
  • 如果输出是数组:把$result['accm_sys_detail']->AccmId改成数组访问语法$result['accm_sys_detail']['AccmId']。

2. 添加防御性代码避免报错

不管上游逻辑如何,先做存在性和类型判断,再执行查询:

@php
$accmId = null;
// 先判断变量存在且是对象
if (isset($result['accm_sys_detail']) && is_object($result['accm_sys_detail'])) {
    $accmId = $result['accm_sys_detail']->AccmId;
}

// 仅当$accmId有效时添加查询条件
$package_banner_data = DB::table('accm_sys_media')
    ->where('media_type', 5)
    ->when($accmId, function ($query) use ($accmId) {
        $query->where('AccmId', $accmId);
    })
    ->get();
@endphp

3. 优化上游数据获取逻辑

如果$result['accm_sys_detail']是通过Eloquent查询得到的,建议:

  • 若必须获取到数据才继续,用firstOrFail()替代first(),查询为空时会抛出404,提前阻断错误流程。
  • 若允许空数据,提前处理空场景,比如:
    $accmSysDetail = AccmSysDetail::where(...)->first();
    $result['accm_sys_detail'] = $accmSysDetail ?? new \stdClass(); // 空时赋值空对象,避免后续属性访问报错
    

内容的提问来源于stack exchange,提问作者sk-tech-linux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:21:28