在视图上显示数据时尝试获取非对象的属性“column_name”
Posted
技术标签:
【中文标题】在视图上显示数据时尝试获取非对象的属性“column_name”【英文标题】:Trying to get property 'column_name' of non-object while displaying data on view 【发布时间】:2019-11-02 21:50:49 【问题描述】:我想在我的刀片视图上显示来自关系数据的数据,但是当我尝试显示数据时,表中只包含一行数据,它显示在视图中,但是如果我在表中插入多个数据,则会出现错误。
我有三张桌子courses
、sections
、course_section
。在course_section
表中,这些是以下列course_id
和section_id
。
我已经尝试过 $section->courses()->first()->courseTitle
这个在***上找到的sn-p。
我的部分型号代码:-
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)"
【问题讨论】:
你应该为这段关系再做一次 foreach。 我想一次显示表格中的数据和一门课程名称i.ibb.co/WchY7gQ/section.png 【参考方案1】:以下是你做错了:
将$section->courses()
替换为$section->courses
,因为您已经在进行早期加载。而$section->courses()
会再次查询db。
检查关系数据是否存在然后显示。
所以你的代码如下:
@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
【讨论】:
评论不用于扩展讨论;这个对话是moved to chat。【参考方案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
【讨论】:
@porloserros 我使用了你的解决方案,但它只重复表中的第一行。 所有课程的课程名称都相同?也许您应该查询模型课程及其相关部分 @AbhishekNimbalkar 我用另一个选项更新了答案。我不知道我是否理解您想要实现的目标以上是关于在视图上显示数据时尝试获取非对象的属性“column_name”的主要内容,如果未能解决你的问题,请参考以下文章
试图从模型获取数据到视图,我得到这些错误: 试图获取非对象和未定义变量的属性