我想从关系数据中在刀片视图中显示数据,但是当试图显示数据而表仅包含一行数据时,它显示在视图中,但是如果我在表中插入多个数据,则会出现错误。
我有三个表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)”
答案 0 :(得分:4)
以下是您在做错的事情:
将$section->courses()
替换为$section->courses
,因为您已经在进行早期加载了。并且$section->courses()
将再次查询数据库。
检查是否存在关系数据,然后显示。
所以您的代码如下:
@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
答案 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