【问题标题】:stacking relationships to get count() laravel 5堆叠关系以获取 count() laravel 5
【发布时间】:2018-03-22 04:32:10
【问题描述】:

我有 4 个表格:学校、课程、名册、学生。 “学校”有很多课程,也有很多“学生”。名册上有许多“学生”。课程有一个“名册”。对?我也很困惑。所以在我的控制器中,我查询了学校表,它让我可以访问“一级”关系。这意味着我可以在我的@foreach 循环中执行 $schools->courses->date 或 $schools->students->first_name 等。这就是我迷路的地方。名册表基本上是一整张外键关系表。除了时间戳和主 ID 之外,它本身没有唯一数据。我有一个表格,我试图在其中显示一所学校的所有课程,以及参加该特定课程的学生的总价值。所以我正在为学校准备每门课程,很简单。但是后来我试图从该课程中的每个学生的名册表中提取 count() 并将其反映在该表行上。

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

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

从中,我可以获得所有课程和学生信息,但我不知道如何基本上将关系堆叠成这样:

学校->课程->名册->学生总数。

我什至没有尝试将所有这些都保留在同一个查询中。我什至不知道如何在控制器中进行查询,只是将变量中的最终值传递给视图。我完全可以在控制器中进行第二次查询以获取名册的值,但我不能在一次查询中围绕每所学校的多个课程,每门课程一个名册。我很困惑自己输入这个问题大声笑。有人可以提供建议吗?

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');
    }
}

【问题讨论】:

  • 你的意思是 roster 是学生和课程之间的直接/数据透视表?
  • 请参考我刚刚发布的关于我的数据库的屏幕截图,重点是名册表。在我看来,我刚刚尝试使用刀片做的是@php ($number = count($class->roster))。但这只会打印数字 1,因为每个班级只有一个名册
  • 抱歉图片被我的代理屏蔽了,(我无法控制)
  • 你不能只做$school->course->roster->students->count();吗?

标签: laravel eloquent blade


【解决方案1】:

您必须首先从其 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 中,您将获得不同名册的学生人数。

【讨论】:

  • 是的。没事儿。我试图弄清楚如何堆叠多个关系。我无法从表中每门课程的花名册中获得学生人数。所以现在,我的表格每行呈现一门课程。在该行的末尾,我试图显示该特定课程的学生总数。数据库在名册表中有一个 course_id,但我不知道如何在 eloquent 或刀片中访问它
  • 现在,在我的学校 1 数据库中,我有 4 名学生就读于 2 个不同的班级。此信息保存在名册表中。我正在尝试获取每个班级的学生总数。所以在名册表中,我有一个 school_id、一个 course_id 和一个 student_id。我已经过滤到学校和课程。我可以运行一个 foreach 并获得这些值。但我无法计算每个名册中的学生人数。
  • 我已经更新了我的答案。弄清楚并告诉我您是否有任何疑问。
  • 我在双括号之间输出什么变量?
  • 抱歉没找到你?
猜你喜欢
  • 2015-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
相关资源
最近更新 更多