Ошибка: свойство [kpi_description] не существует в этом экземпляре коллекции в Laravel - PullRequest
0 голосов
/ 18 февраля 2020

В моем Laravel -5.8 проекте у меня есть этот код:

Контроллер

public function index()
{
  $userEmployee = Auth::user()->employee_id;
  $goals = AppraisalGoal::where('employee_id', $userEmployee)->get();

  return view('appraisal.appraisal_goals.index')->with('goals', $goals);
}

модель

class AppraisalGoal extends Model
{
  protected $table = 'appraisal_goals';
  protected $primaryKey = 'id';

  protected $fillable = [
              'weighted_score',
              'employee_comment',
              'goal_title',
          ];

  public function appraisalgoaldetail(){
    return $this->hasMany('App\Models\Appraisal\AppraisalGoalDetail');
  }
}

class AppraisalGoalDetail extends Model
{
 protected $table = 'appraisal_goal_details';
 protected $fillable = [
              'kpi_description',
          ];

 public function appraisalgoal()
 {
    return $this->belongsTo('App\Models\Appraisal\AppraisalGoal');
}     
}

функция оценка объекта ( ) - это отношение hasMany.

view

 @foreach($goals as $key => $goal)
    <td>
      {{$key+1}}
    </td>
    <td>
      {{$goal->appraisalgoaldetail->kpi_description ?? '' }}
    </td>                            
    <td>
       {{$goal->goal_title ?? '' }}
    </td>
 @endforeach 

Когда я запустил код, я получил эту ошибку:

Свойство [kpi_description] не существуют в этом экземпляре коллекции. (Представление: C: \ xampp \ htdocs \ accly \ resources \ views \ appraisal_goals \ index.blade. php)

Как мне решить эту проблему?

Спасибо вы

1 Ответ

0 голосов
/ 18 февраля 2020

Здесь вы написали связь HasMany с AppraisalGoal и AppraisalGoalDetail. Так что $goal->appraisalgoaldetail будет приведен в массив. В результате вы пытаетесь получить kpi_description из массива. Я думаю, что это проблема, с которой вы столкнулись.

Чтобы выяснить проблему, попробуйте

@foreach($goals as $key => $goal)
<td>
  {{$key+1}}
</td>
<td>
  {{$goal->appraisalgoaldetail[0]['kpi_description'] ?? '' }}
</td>                            
<td>
   {{$goal->goal_title ?? '' }}
</td>
@endforeach 

Или используйте foreach, например

@foreach($goals as $key => $goal)
<td>
  {{$key+1}}
</td>
<td>
  @foreach($goal->appraisalgoaldetail as $app)
    <div>{{ $app->appraisalgoaldetail }}</div>
  @endforeach
</td>                            
<td>
   {{$goal->goal_title ?? '' }}
</td>


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