Попытка получить свойство 'column_name' не-объекта при отображении данных в представлении - PullRequest
2 голосов
/ 20 июня 2019

Я хочу показать данные на моем блэйд-представлении из данных отношений, но когда я пытаюсь отобразить данные, тогда как таблица содержит только одну строку данных, которые она отображает в представлении, но если я вставлю в таблицу несколько данных, это выдаст мне ошибку.

У меня есть три таблицы courses, sections, course_section. В таблице course_section это следующие столбцы course_id и section_id.

Я пробовал {{ $section->courses()->first()->courseTitle }} этот фрагмент в виде найден в stackoverflow.

Код моего раздела Модель: -

class section extends Model
{
  public function courses(){
    return $this->belongsToMany('App\Model\admin\course\course','course_sections','course_id');
  }
}

Код моего раздела контроллера: -

$sections = section::with('courses')->orderBy('id','DESC')->get();
      return view('backend.courses.section.all',compact('sections','courses'));

Код моего просмотра: -

@foreach ($sections as $section)
          <tr>
            <td>{{ $section->title }}</td>
            <td>{{ $section->courses()->first()->courseTitle }}</td>
          </tr>
@endforeach

Я получаю эту ошибку

"Попытка получить свойство 'courseTitle' необъекта (Просмотр: ресурсы / виды / бэкенд / курсы / раздел / all.blade.php) "

Ответы [ 2 ]

4 голосов
/ 20 июня 2019

Вот следующее, что вы делаете неправильно:

  1. Замените $section->courses() на $section->courses, поскольку вы уже выполняете раннюю загрузку.И $section->courses() снова запросит в дБ.

  2. Проверьте, существуют ли реляционные данные, и покажите.

Таким образом, ваш код будет выглядеть следующим образом:

@foreach ($sections as $section)
<tr>
    <td>{{ $section->title }}</td>
    <td>
        @php
           $course = $section->courses->first();
        @endphp

        {{ $course->courseTitle or "" }}
    </td>
</tr>
@endforeach

Дайте мне знать, если это поможет!

Отредактировано:

В ходе разговора отношения были изменены, например, course ->hasMany -> sections и section ->belongsTo -> course так что лезвие будет меняться как.

@foreach ($sections as $section)
<tr>
    <td>{{ $section->title }}</td>
    <td>
        @php
           $course = $section->course;
        @endphp

        {{ $course->courseTitle or "" }}
    </td>
</tr>
@endforeach
2 голосов
/ 20 июня 2019

Контроллер секций:

$sections = section::with('courses')->orderBy('id','DESC')->get();
return view('backend.courses.section.all', compact('sections'));

В представлении вы должны зациклить секции, а затем курсы и создать каждую строку.Например:

@foreach ($sections as $section)
    @foreach ($section->courses as $course)
          <tr>
            <td>{{ $section->title }}</td>
            <td>{{ $course->courseTitle }}</td>
          </tr>
    @endforeach
@endforeach

Обратите внимание, что это $ section-> курсы, а не $ section-> курсы (), поскольку соответствующие курсы уже существуют, вам не нужно запрашивать их снова.


Обновление

Или вы можете выполнить запрос через course

$courses = course::with('sections')->get();
return view('backend.courses.section.all',compact('courses'));

И в представлении:

@foreach ($courses as $course)
    @foreach ($course->sections as $section)
          <tr>
            <td>{{ $section->title }}</td>
            <td>{{ $course->courseTitle }}</td>
          </tr>
    @endforeach
@endforeach
...