【问题标题】:RESOLVED - How to retrieve Nested Relationship in Laravel View已解决 - 如何在 Laravel 视图中检索嵌套关系
【发布时间】:2021-01-07 09:05:33
【问题描述】:

我是 laravel 的新手,但一直在学习。现在我有 3 个表 [课程、单元和课程]

课程有多个单元,每个单元有多个课程

数据库表看起来像这样:

课程
身份证
crs_name
..

单位
身份证
course_id
unit_title

课程
身份证
course_id
unit_id
课程标题

关系定义如下: 单元模型

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

非常感谢控制器和视图方面的任何帮助

【问题讨论】:

    标签: laravel eloquent laravel-blade laravel-controller


    【解决方案1】:

    在您的控制器中,您必须做一些更改,因为当我们重定向到一个新的 URL 并将数据以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');
    }
    

    要获得特定的单元课程,您必须在刀片中完成:

    $unit->lessons
    

    您的刀片文件查找代码将是:

    @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
    

    【讨论】:

    • 您好 Vinot,谢谢,我应该如何在刀片视图中检索属于特定单元的课程?
    • 我做了所有更改并添加了 foreach 单元课程,但我得到了同样的旧错误 [为 foreach 提供了无效参数]
    • 请用您所做的更改更新您的问题。
    • 更新完成 Vinod
    • 请将lessons关联方法添加到Unit模型中。
    猜你喜欢
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 2018-06-03
    相关资源
    最近更新 更多