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

Laravel生成动态sitemap.xml报错:Trying to get property 'slug' of non-object

错误原因及解决方案

错误根源

报错Trying to get property 'slug' of non-object是因为部分Property记录没有关联有效的Category模型,导致$property->category返回null而非对象,此时访问->slug就会触发错误。

修复步骤

1. 预加载关联(优化性能+确保关联数据正确获取)

修改控制器中的查询代码,使用with('category')预加载关联模型,避免N+1查询问题,同时确保关联数据被正确加载:

// SitemapController.php
$properties = Property::with('category')->latest()->get();

2. 视图中处理空关联情况

针对可能存在的空关联,有三种处理方式:

方式一:使用Laravel的optional辅助函数

自动处理null值,避免报错:

{{ optional($property->category)->slug }}

方式二:条件判断+默认值

明确判断关联是否存在,给空关联设置默认值:

@if($property->category)
    {{ $property->category->slug }}
@else
    uncategorized
@endif

方式三:PHP可选链(Laravel 8+支持)

利用PHP 8的可选链操作符简化代码:

{{ $property->category?->slug }}

3. 业务层面的根源修复(可选)

如果业务要求每个Property必须属于一个Category,建议:

  • 在Property模型的category关联中添加约束,确保数据完整性
  • 在数据库层面给category_id字段设置外键约束,并设置为非空

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:30:51