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也做非空判断即可。
代码修改点:
- 将Lead循环中的两处
location字段赋值:
原代码:
'location' => $leads->locationTrashed->name,
修改为(PHP7+支持null合并运算符,写法最简洁):
'location' => $leads->locationTrashed->name ?? '',
如果使用低版本PHP,改用三目运算符:
'location' => $leads->locationTrashed ? $leads->locationTrashed->name : '',
- 另外你代码中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
相关产品推荐
相关产品推荐

