Как устранить ошибку: Попытка получить свойство 'id' необъекта в Laravel - PullRequest
0 голосов
/ 27 марта 2020

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

Контроллер:

public function index()
{
    $userCompany = Auth::user()->company_id;
    $userEmployee = Auth::user()->employee_id;
    $userId = Auth::user()->id;

    $linemanager = DB::table('hr_employees')->where('id', $userEmployee)->first();
    $linemanageruserid = DB::table('hr_employees')->select('line_manager_id')->where('line_manager_id', $linemanager->line_manager_id)->first();

    $linemanageruserids = DB::table('hr_employees')->where('id', $linemanageruserid->line_manager_id)->first();  

    $linemanagerdetails = DB::table('hr_employees')->select('id','employee_code','first_name','last_name')->where('id', $linemanageruserids->id)->first();
    $linemanagerdetail = $linemanagerdetails->first_name . ' ' . $linemanagerdetails->last_name;

    $employees      =       HrEmployee::with('linemanager')->where('id', $userId)->get();
    return view('dashboard')
            ->with('employees', $employees)
            ->with('linemanagerdetail', $linemanagerdetail);   
}

view

     @foreach($employees as $key => $employee)
    <!-- Profile Image -->
    <div class="card card-secondary card-outline">
      <div class="card-body box-profile">

        <h3 class="profile-username text-center">{{auth()->user()->first_name}} {{auth()->user()->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">{{isset($linemanagerdetail) ? $linemanagerdetail : 'None'}}</a>
          </li>
        </ul>


      </div>
      <!-- /.card-body -->
    </div>
    <!-- /.card -->
    @endforeach 

Когда я рендерил представление, я ожидал

{{isset ($ linemanagerdetail)? $ linemanagerdetail: 'None'}}

, чтобы отобразить имя и фамилию менеджера линии, но я получил ошибку:

Попытка получить свойство 'id' не object

Затем эта строка кода подсвечивается:

$ linemanagerdetails = DB :: table ('hr_employees') -> select ('id', 'employee_code' , 'first_name', 'last_name') -> где ('id', $ linemanageruserids-> id) -> first ();

При отладке я заметил, что ошибка произошла из-за поле пустое.

Как отобразить None, если поле пустое?

Спасибо.

1 Ответ

0 голосов
/ 28 марта 2020

Скорее всего, $linemanageruserids - это не объект, а массив, в котором вам нужно использовать $linemanageruserids['id'].

Это потому, что вызов DB::table(...) не может вернуть объект, так как он не может знать, как привести результаты. Следовательно, он вернет массив массивов. Затем, вызвав first() в вызове, вы просто получите массив одного измерения в результате.

Надеюсь, что это все объяснит!

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