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

Laravel运行报ErrorException Trying to get property 'name' of non-object问题求助

报错原因

你遇到的ErrorException Trying to get property 'name' of non-object错误,本质是代码执行到标注行时,$leads->locationTrashed返回值为null而非对象,此时尝试访问null的name属性就会触发该报错。
出现该情况的原因是部分Lead记录对应的locationTrashed关联数据不存在(比如关联的location已经被软删除、关联外键值为空/非法)。

修复方案

你可以根据业务需求选择以下任意一种方案修复:

方案1:增加判空兼容空关联(推荐,不丢失数据)

和你代码中已有的eventTypeTrashed判空逻辑一致,对locationTrashed也做非空判断即可。

代码修改点:

  1. 将Lead循环中的两处location字段赋值:
    原代码:
'location' => $leads->locationTrashed->name,

修改为(PHP7+支持null合并运算符,写法最简洁):

'location' => $leads->locationTrashed->name ?? '',

如果使用低版本PHP,改用三目运算符:

'location' => $leads->locationTrashed ? $leads->locationTrashed->name : '',
  1. 另外你代码中Event循环里的两处$events->booking->location_trashed->name、$events->contactus->event_type_trashed->name也存在相同的空关联报错风险,建议同步做判空处理:
'location' => $events->booking->location_trashed->name ?? '',
'event_type' => $events->contactus->event_type_trashed->name ?? '',

方案2:使用Laravel optional辅助函数

如果是Laravel 5.5+版本,也可以用框架内置的optional()函数处理空关联:

'location' => optional($leads->locationTrashed)->name,

关联为空时会自动返回null,不会抛出错误。

方案3:查询时过滤无关联的记录

如果业务要求返回的Lead必须有关联的locationTrashed,可以在查询时增加has()条件,直接过滤掉没有关联的记录,从根源避免空对象问题:

$lead_history = Lead::with('user','eventTypeTrashed','locationTrashed')
    ->has('locationTrashed')
    ->get();

该方案会丢失没有对应location的lead数据,请确认符合业务逻辑再使用。

额外注意事项

你代码中其他关联调用也存在同样的报错隐患,比如$history->userResponsible()、$leads->user、$events->booking、$events->contactus等,建议都统一增加判空处理,避免后续出现同类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:45:01