堆叠关系以获得count()laravel 5

时间:2018-03-22 04:32:10

标签: laravel eloquent blade

我有4张桌子:学校,课程,名册,学生。 "学校"有很多课程,有很多学生"。名单上有许多学生"。这些课程有一个"名单"。对?我也很困惑。所以在我的控制器中,我查询了学校的桌子,它让我可以访问"一个级别"关系。这意味着我可以在@foreach循环中执行$ schools-> courses-> date或$ schools-> students-> first_name etc ...在这里,我迷路了。名册表基本上是一整套外键关系。除了时间戳和主ID之外,它本身没有唯一的数据。我有一张桌子,我试图显示学校的所有课程,以及参加该特定课程的学生的总价值。因此,我很容易为学校开设每门课程。但是,我试图从该名单中的每个学生的名单表中抽出count()并将其反映在该表格行上。

所以回顾一下,每个课程有一个表行。试图让学生参加每个相应的课程。我的控制器查询基本上只是

$schools::School::findOrFail($id);

从那以后,我可以获得所有的课程和学生信息,但我无法弄清楚如何基本上将这种关系叠加到这样的东西:

school-> course-> roster->学生总数。

我甚至没有尝试将这一切保留在同一个查询中。我甚至无法弄清楚如何在控制器中进行查询,只是将变量中的最终值传递给视图。我完全可以在控制器中进行第二次查询以获得名单的价值,但是我不能在每个学校的多个课程中包围每个课程的一个名单。我迷惑自己输入这个问题大声笑。有人可以提供建议吗?

enter image description here

class Roster extends Model
{
    public function courses()
    {
        return $this->belongsTo('App\Course');
    }

    public function students(){
        return $this->hasMany('App\Student', 'student_id', 'id');
    }
}

class Course extends Model
{
    public function schools()
    {
        return $this-> belongsTo('App\School');
    }

    public function roster()
    {
        return $this->hasOne('App\Roster', 'class_id', 'id');
    }


}

class Student extends Model
{

    public function grade(){

      return $this->hasOne('App\Grade');
    }

    public function school()
    {
        return $this->hasOne('App\School');
    }

    public function drive()
    {
        return $this->hasMany('App\Drive');
    }

    public function roster()
    {
        return $this->belongsTo('App\Roster');
    }

}

class School extends Model
{
    public function courses()
    {
        return $this->hasMany('App\Course');
    }

    public function students()
    {
        return $this->hasMany('App\Student');
    }

    public function employee()
    {
        return $this->hasMany('App\Employee','school_id', 'id');
    }

    public function drive()
    {
        return $this->hasMany('App\Drive');
    }
    public function car(){
        return $this->hasMany('App\Car', 'schools_id', 'id');
    }
}

1 个答案:

答案 0 :(得分:0)

您必须先从其ID中获取学校

$school = School::findOrFail($id);

然后,您与课程有 hasMany 关系,因此您将获得学校课程的结果

$courses = $school->courses;

现在您在课程中有数组结果,因此您可以使用 foreach 循环

$rosters = [];
foreach($courses as $course)
{
   $rosters[] = $cource->roster;
}

在此之后,  名册与学生之间存在 hasMany 关系,因此您可以为每个名单

$students = [];
foreach($rosters as $roster){
   $students[$roster->id] = $roster->students->count();
}

$ students 中,您将获得不同名单的学生数量。