首页 > 解决方案 > 在视图上显示数据时尝试获取非对象的属性“column_name”

问题描述

我想在我的刀片视图上显示来自关系数据的数据,但是当我试图显示数据时,表只包含一行数据,它显示在视图中,但是如果我在表中插入多个数据,它会给我一个错误。

我有三张桌子courses,,,sectionscourse_sectioncourse_section表中,这些是以下列course_idsection_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’(查看:resources/views/backend/courses/section/all.blade.php)”

标签: laraveleloquentlaravel-5.8

解决方案


以下是您做错的事情:

  1. 替换$section->courses()$section->courses您已经在进行早期加载。并将$section->courses()再次查询到 db。

  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 -> sectionssection ->belongsTo -> course所以刀片也会改变。

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

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

推荐阅读