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

如何修复Laravel中Trying to get property 'passing_grade' of non-object错误

错误修复方案

错误原因

该报错本质是代码尝试读取非对象类型变量的passing_grade属性,通常是控制器传递给视图的课程关联数据存在空值,比如已完成记录关联的课程数据被删除、关联关系未正确加载、存在脏数据导致关联查询返回null。

修复步骤

1. 控制器代码优化

优先在数据查询层做过滤,避免无效数据传递到视图:

// 示例:获取当前登录用户的已完成课程数据
$completedCourses = auth()->user()->courseCompletions()
    ->with('course') // 预加载关联的课程模型,passing_grade字段通常存储在课程表
    ->whereHas('course') // 过滤掉关联课程不存在的脏数据
    ->get();

return view('你的视图文件名', compact('completedCourses'));

额外排查点:

  • 确认CourseCompletion模型中的course关联方法写法正确,返回belongsTo(Course::class)
  • 若允许展示已软删的课程,可在with关联时追加->withTrashed()

2. Blade视图层兼容

视图层增加空值判断,进一步避免异常:

@foreach($completedCourses as $completion)
    {{-- 空安全判断,避免非对象报错 --}}
    @isset($completion->course)
    <div class="course-card">
        <h3>{{ $completion->course->title }}</h3>
        <p>合格分数线:{{ $completion->course->passing_grade }}分</p>
        <p>你的考核得分:{{ $completion->score }}分</p>
        {{-- 证书下载按钮,路由参数可根据你的业务逻辑替换为课程ID --}}
        <a href="{{ route('certificate.download', $completion->id) }}" class="download-btn">下载对应证书</a>
    </div>
    @endisset
@endforeach

如果使用PHP7.4及以上版本,可直接用空安全运算符简化判断:{{ $completion?->course?->passing_grade }}

3. 补充证书下载路由

在routes/web.php中添加下载路由:

Route::get('certificate/download/{completion}', [CertificateController::class, 'download'])->name('certificate.download');

在CertificateController的download方法中实现证书生成、返回下载流的逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:42:03