Laravel - ОШИБКА: вызов функции-члена fullName () со значением NULL - PullRequest
1 голос
/ 04 апреля 2020

В моем проекте Laravel -5.8 я пытаюсь получить доступ к блейду представления представления

Контроллер

public function show($id)
{
    if (! Gate::allows('employee_show')) {
        return abort(401);
    }  
    try { 

        return view('hr.employees.show', ['employee' => HrEmployee::findOrFail($id)]);
    } catch (Exception $exception) {
        Session::flash('error', 'Action failed! Please try again');
        return back();
        }                  
}

Модель

class HrEmployee extends Model
{
  public $timestamps = false;
  protected $table = 'hr_employees';
  protected $primaryKey = 'id';

  protected $fillable = [
              'id',
              'employee_code',
              'company_id',
              'email',
              'line_manager_id',
              'employee_designation_id',
              'employee_grade_level_id',
              'employee_category_id',
              'employee_type_id',
              'employement_type_id',
              'work_location_id',
              'employment_date',
              'first_name',
              'last_name',
              'local_government_id',
              'nationality_id',
              'other_name',
              'is_hod',
              'department_id',
          ];

  public function linemanager()
  {
    return $this->hasOne('App\Models\Hr\HrEmployee', 'id', 'line_manager_id');
  }     

  public function fullName()
  {
    return $this->first_name . ' ' . $this->other_name . ' ' . $this->last_name;
  }
}

просмотр

<h3 class="profile-username text-center">{{$employee->first_name}} {{$employee->last_name}}</h3>

  <p class="text-muted text-center">Designation: {{isset($employee->designation) ? $employee->designation->designation_name : 'N/A'}}</p>

 <ul class="list-group list-group-unbordered mb-3">
              <li class="list-group-item">
                <b>Staff ID:</b> <a class="float-right">{{isset($employee->employee_code) ? $employee->employee_code : 'N/A'}}</a>
              </li>
              <li class="list-group-item">
                <b>Department:</b> <a class="float-right">{{isset($employee->department) ? $employee->department->dept_name : 'N/A'}}</a>
              </li>
              <li class="list-group-item">
                <b>Grade Level:</b> <a class="float-right">{{isset($employee->gradelevel) ? $employee->gradelevel->grade_level_name : 'N/A'}}</a>
              </li>
               <li class="list-group-item">
                 <b>Line Manager:</b> <a class="float-right">{{ $employee->linemanager->fullName() ?? 'None' }}</a>
               </li>  
              <li class="list-group-item">
                <b>HOD:</b> <a class="float-right">{{isset($employee->department->depthead) ? $employee->department->depthead->first_name. ' ' .$employee->department->depthead->last_name : 'None'}}</a>
              </li>                     
 </ul>

Когда я рендерил представление, я получил эту ошибку:

ОШИБКА: вызов функции-члена fullName () со значением NULL

Я нашел Получается, что всякий раз, когда у какого-либо сотрудника нет линейного менеджера, появляется ошибка

<b>Line Manager:</b> <a class="float-right">{{ $employee->linemanager->fullName() ?? 'None' }}</a>

Как устранить ее?

Спасибо

1 Ответ

0 голосов
/ 05 апреля 2020

Прежде всего, вам лучше использовать accessor вместо метода для получения полного имени. Определите это так:

public function getFullNameAttribute()
{
    return implode(' ', array_filter([$this->first_name, $this->other_name, $this->last_name])); 
}

В качестве дополнительного бонуса вы не увидите дополнительный «клей», если какой-либо из атрибутов нулевой или пустой;

Затем вызовите это в своем коде как простой атрибут:

{{ $employee->linemanager->full_name ?? 'None' }}

PS Вы не должны return abort функционировать. В любом случае это вызовет исключение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...