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

Laravel求职门户报错:尝试获取非对象的'name'属性求助

问题描述

开发求职门户时,企业端展示求职者申请列表出现报错:

Trying to get property 'name' of non-object (View: C:\xampp\htdocs\joblister-laravel-8-main\resources\views\job-application\index.blade.php)

报错触发自视图文件中访问关联模型属性的位置,相关index.blade.php代码如下:

@extends('layouts.account')

@section('content')
  <div class="account-layout  border">
    <div class="account-hdr bg-primary text-white border">
      Job Applications
    </div>
    <div class="account-bdy p-3">
      <div class="row">
        <div class="col-sm-12 col-md-12">
          <p class="mb-3 alert alert-primary">Listing all the Applicants who applied for your <strong>job listings</strong>.</p>
          <div class="table-responsive pt-3">
            <table class="table table-hover table-striped small">
              <thead>
                <tr>
                  <th>#</th>
                  <th>Applicant Name</th>
                  <th>Email</th>
                  <th>Job Title</th>
                  <th>Applied on</th>
                  <th>Actions</th>
                </tr>
              </thead>
              <tbody>
                @if($applications->count())
                  @foreach($applications as $application)
                  <tr>
                    <td>1</td>
                    <td>{{$application->user->name}}</td>
                    <td><a href="mailto:{{$application->user->email}}">{{$application->user->email}}</a></td>
                    <td><a href="{{route('post.show',['job'=>$application->post->id])}}">{{substr($application->post->job_title,0,14)}}...</a></td>
                    <td>{{$application->created_at}}</td>
                    <td><a href="{{route('jobApplication.show',['id'=>$application])}}" class="btn primary-outline-btn">View</a>
                      <form action="{{route('jobApplication.destroy')}}" method="POST" class="d-inline-block">
                        @csrf
                        @method('delete')
                        <input type="hidden" name="application_id" value="{{$application->id}}">
                        <button type="submit" class="btn danger-btn">Delete</button>
                      </form>
                    </td>
                  </tr>
                  @endforeach
                @else
                  <tr>
                    <td>You haven't received any job applications.</td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                    <td></td>
                  </tr>
                @endif
              </tbody>
            </table>
          </div>
          <div class="d-flex justify-content-center mt-4 custom-pagination">
            {{ $applications && $applications->links() }}
          </div>
        </div>
      </div>
    </div>
  </div>
@endSection
解决方案

错误核心是**$application->user或$application->post为null**,直接访问其属性触发报错,以下是具体修复步骤:

1. 排查关联与数据完整性

  • 确认JobApplication模型中关联定义正确:
    // app/Models/JobApplication.php
    public function user()
    {
        return $this->belongsTo(User::class);
    }
    
    public function post()
    {
        return $this->belongsTo(Post::class);
    }
    
  • 检查数据库job_applications表,查看是否存在user_id或post_id为null的记录——这类无效数据会导致关联查询返回null。

2. 视图层防御性处理

在视图中访问关联属性前先判断有效性,两种常用方式:

方式一:使用optional()辅助函数

Laravel自带的optional()可避免空对象报错:

<td>{{ optional($application->user)->name }}</td>
<td><a href="mailto:{{ optional($application->user)->email }}">{{ optional($application->user)->email }}</a></td>
<td>
  <a href="{{ route('post.show',['job'=>optional($application->post)->id]) }}">
    {{ substr(optional($application->post)->job_title ?? '',0,14) }}...
  </a>
</td>

方式二:条件判断显式处理

<td>{{ $application->user ? $application->user->name : 'N/A' }}</td>
<td>
  <a href="mailto:{{ $application->user ? $application->user->email : '' }}">
    {{ $application->user ? $application->user->email : 'N/A' }}
  </a>
</td>
<td>
  @if($application->post)
    <a href="{{ route('post.show',['job'=>$application->post->id]) }}">
      {{ substr($application->post->job_title,0,14) }}...
    </a>
  @else
    N/A
  @endif
</td>

3. 查询层过滤无效数据

在控制器查询申请列表时,直接过滤掉无关联的记录,同时预加载关联提升性能:

// 控制器代码示例
$applications = \App\Models\JobApplication::with(['user', 'post'])
    ->whereNotNull('user_id')
    ->whereNotNull('post_id')
    ->paginate(10); // 保持分页逻辑

内容的提问来源于stack exchange,提问作者013_Anurag Parashar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:54:32