Laravel视图contact.blade.php读取profile_picture报非对象属性错误
错误原因
报错本质是你尝试访问非对象类型的属性,这里对应代码里的$student->user返回了null,当前传入的Student实例没有关联到对应的User模型数据。
修复步骤
- 第一步:控制器层预加载关联
修改StudentController的contact方法,主动加载user关联,同时避免N+1查询问题:
public function contact(Student $student) { // 预加载user关联 $student->load('user'); $class = Grade::with('subjects')->where('id', $student->class_id)->first(); return view('backend.students.contact', compact('class','student')); }
- 第二步:视图层做空值兼容处理
使用PHP7.4+支持的可选操作符?->配合空合并运算符??,就算关联不存在也不会触发报错,还可以设置默认值:
{{-- 头像显示兼容 --}} <img class="w-20 h-20 sm:w-32 sm:h-32 rounded" src="{{ asset('images/profile/' . ($student->user?->profile_picture ?? 'default_avatar.png')) }}" alt="avatar"> {{-- 获取用户邮箱同理 --}} <p>联系邮箱:{{ $student->user?->email ?? '暂无绑定邮箱' }}</p>
- 第三步:(可选)数据层校验根治问题
如果希望彻底避免这类问题,先确认两个配置:
- 检查
Student模型的关联定义是否正确,外键字段和数据库对齐:
// app/Models/Student.php public function user() { // 第二个参数为students表中关联users表的外键字段名,根据实际业务修改 return $this->belongsTo(User::class, 'user_id'); }
- 检查当前Student数据的
user_id字段是否存在有效值,对应user记录是否被删除,如果是脏数据可以补全关联,或者在关联定义时加软删除过滤:
public function user() { return $this->belongsTo(User::class, 'user_id')->withTrashed(false); }
内容的提问来源于stack exchange,提问作者askermad789
相关产品推荐
相关产品推荐

