在视图上显示数据时尝试获取非对象的属性“ column_name”

时间:2019-06-20 05:58:33

标签: laravel eloquent laravel-5.8

我想从关系数据中在刀片视图中显示数据,但是当试图显示数据而表仅包含一行数据时,它显示在视图中,但是如果我在表中插入多个数据,则会出现错误。

我有三个表coursessectionscourse_section。在course_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'(查看:   资源/视图/后端/课程/部分/all.blade.php)”

2 个答案:

答案 0 :(得分:4)

以下是您在做错的事情:

  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 -> sectionssection ->belongsTo -> course那样改变,因此刀片也会像这样改变。

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

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

答案 1 :(得分:2)

部分控制器:

$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-> courses,而不是$ section-> courses(),因为相关的课程已经存在,因此您无需再次查询它们。


更新

或者您可以通过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