已解决 - 如何在 Laravel 视图中检索嵌套关系
RESOLVED - How to retrieve Nested Relationship in Laravel View
我是 laravel 的新手,但一路学习..现在我有 3 个表格 [课程、单元和课程]
课程有多个单元,每个单元有多个课时
数据库表看起来像这样:
课程
编号
crs_name
..
单位
编号
course_id
unit_title
节课
编号
course_id
unit_id
lesson_title
关系定义如下:
单位型号
public function course(){return $this->belongsTo('App\Course');}
public function lessons(){return $this->hasMany('App\Lesson');}
课程模型
public function units(){return $this->hasMany('App\Unit');}
public function lessons(){return $this->hasMany('App\Lesson');}
课程模型
public function course(){return $this->belongsTo('App\Course');}
public function unit(){return $this->belongsTo('App\Unit');}
这是我的控制器[我确定问题出在这里,因为我无法定义嵌套关系]
public function singleCourse($id)
{
$course = Course::find($id);
$reviews = Review::where('course_id', $id)->orderBy('created_at', 'desc')->take(30)->paginate(10);
$lessons = Lesson::where('course_id', $id)->take(15);
$units = Unit::with('lessons')->where('course_id', $id)->take(15);
return view('courses.course', compact('course', 'reviews', 'lessons', 'units'));
}
在我看来,我设法检索了课程单元,但无法获取每个单元的课程,当我尝试其他任何操作时,我会遇到错误
enter image description here
我的观点
@foreach($course->units as $unit)
<div class="card">
<div class="card-header">
<h3 class="accordion-heading">
<a href="#shippingOptions" role="button" data-toggle="collapse" aria-expanded="true" aria-controls="shippingOptions">
<i class="fas fa-bookmark"></i>
{{$unit->unit_title}}<span class="accordion-indicator"></span>
</a>
</h3>
</div>
<div class="collapse show" id="shippingOptions" data-parent="#productPanels">
@foreach($unit->lessons as $lesson)
<div class="card-body font-size-sm">
<div class="d-flex justify-content-between border-bottom pb-2">
<div>
<div class="font-weight-semibold text-dark"><i class="czi-video"></i> {{{$lesson->lesson_title}}}</div>
<div class="font-size-sm text-muted"><i class="far fa-clock"></i> 1h 20m</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@endforeach
非常感谢对控制器和视图的任何帮助
在你的控制器中,当我们重定向到新的 URL 并将数据闪烁到 session 作为 explained here 时,你必须做一些更改,因为 with
正在使用.所以你可以用下面给出的替换你的控制器:
public function singleCourse($id)
{
$course = Course::with(['lessons', 'units'])->find($id);
$reviews = Review::where('course_id', $id)->orderBy('created_at', 'desc')->take(30)->paginate(10);
$lessons = $course->lessons()->take(15);
$units = $course->units()->take(15);
return view('courses.course', compact('course', 'reviews', 'lessons', 'units');
}
要获得单元课程,您必须在单元模型中定义一个关系:
public function lessons()
{
return $this->hasMany('App\Lesson');
}
要获得特定的单元课程,您必须在 blade:
$unit->lessons
此处 blade 文件的查找代码为:
@foreach($course->units as $unit)
<div class="card">
<div class="card-header">
<h3 class="accordion-heading">
<a href="#shippingOptions" role="button" data-toggle="collapse" aria-expanded="true" aria-controls="shippingOptions">
<i class="fas fa-bookmark"></i>
{{$unit->unit_title}}<span class="accordion-indicator"></span>
</a>
</h3>
</div>
<div class="collapse show" id="shippingOptions" data-parent="#productPanels">
@foreach($unit->lessons as $lesson)
<div class="card-body font-size-sm">
<div class="d-flex justify-content-between border-bottom pb-2">
<div>
<div class="font-weight-semibold text-dark"><i class="czi-video"></i> {{{$lesson->lesson_title}}}</div>
<div class="font-size-sm text-muted"><i class="far fa-clock"></i> 1h 20m</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@endforeach
我是 laravel 的新手,但一路学习..现在我有 3 个表格 [课程、单元和课程]
课程有多个单元,每个单元有多个课时
数据库表看起来像这样:
课程
编号
crs_name
..
单位
编号
course_id
unit_title
节课
编号
course_id
unit_id
lesson_title
关系定义如下: 单位型号
public function course(){return $this->belongsTo('App\Course');}
public function lessons(){return $this->hasMany('App\Lesson');}
课程模型
public function units(){return $this->hasMany('App\Unit');}
public function lessons(){return $this->hasMany('App\Lesson');}
课程模型
public function course(){return $this->belongsTo('App\Course');}
public function unit(){return $this->belongsTo('App\Unit');}
这是我的控制器[我确定问题出在这里,因为我无法定义嵌套关系]
public function singleCourse($id)
{
$course = Course::find($id);
$reviews = Review::where('course_id', $id)->orderBy('created_at', 'desc')->take(30)->paginate(10);
$lessons = Lesson::where('course_id', $id)->take(15);
$units = Unit::with('lessons')->where('course_id', $id)->take(15);
return view('courses.course', compact('course', 'reviews', 'lessons', 'units'));
}
在我看来,我设法检索了课程单元,但无法获取每个单元的课程,当我尝试其他任何操作时,我会遇到错误 enter image description here
我的观点
@foreach($course->units as $unit)
<div class="card">
<div class="card-header">
<h3 class="accordion-heading">
<a href="#shippingOptions" role="button" data-toggle="collapse" aria-expanded="true" aria-controls="shippingOptions">
<i class="fas fa-bookmark"></i>
{{$unit->unit_title}}<span class="accordion-indicator"></span>
</a>
</h3>
</div>
<div class="collapse show" id="shippingOptions" data-parent="#productPanels">
@foreach($unit->lessons as $lesson)
<div class="card-body font-size-sm">
<div class="d-flex justify-content-between border-bottom pb-2">
<div>
<div class="font-weight-semibold text-dark"><i class="czi-video"></i> {{{$lesson->lesson_title}}}</div>
<div class="font-size-sm text-muted"><i class="far fa-clock"></i> 1h 20m</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@endforeach
非常感谢对控制器和视图的任何帮助
在你的控制器中,当我们重定向到新的 URL 并将数据闪烁到 session 作为 explained here 时,你必须做一些更改,因为 with
正在使用.所以你可以用下面给出的替换你的控制器:
public function singleCourse($id)
{
$course = Course::with(['lessons', 'units'])->find($id);
$reviews = Review::where('course_id', $id)->orderBy('created_at', 'desc')->take(30)->paginate(10);
$lessons = $course->lessons()->take(15);
$units = $course->units()->take(15);
return view('courses.course', compact('course', 'reviews', 'lessons', 'units');
}
要获得单元课程,您必须在单元模型中定义一个关系:
public function lessons()
{
return $this->hasMany('App\Lesson');
}
要获得特定的单元课程,您必须在 blade:
$unit->lessons
此处 blade 文件的查找代码为:
@foreach($course->units as $unit)
<div class="card">
<div class="card-header">
<h3 class="accordion-heading">
<a href="#shippingOptions" role="button" data-toggle="collapse" aria-expanded="true" aria-controls="shippingOptions">
<i class="fas fa-bookmark"></i>
{{$unit->unit_title}}<span class="accordion-indicator"></span>
</a>
</h3>
</div>
<div class="collapse show" id="shippingOptions" data-parent="#productPanels">
@foreach($unit->lessons as $lesson)
<div class="card-body font-size-sm">
<div class="d-flex justify-content-between border-bottom pb-2">
<div>
<div class="font-weight-semibold text-dark"><i class="czi-video"></i> {{{$lesson->lesson_title}}}</div>
<div class="font-size-sm text-muted"><i class="far fa-clock"></i> 1h 20m</div>
</div>
</div>
</div>
@endforeach
</div>
</div>
@endforeach