我有4张桌子:学校,课程,名册,学生。 "学校"有很多课程,有很多学生"。名单上有许多学生"。这些课程有一个"名单"。对?我也很困惑。所以在我的控制器中,我查询了学校的桌子,它让我可以访问"一个级别"关系。这意味着我可以在@foreach循环中执行$ schools-> courses-> date或$ schools-> students-> first_name etc ...在这里,我迷路了。名册表基本上是一整套外键关系。除了时间戳和主ID之外,它本身没有唯一的数据。我有一张桌子,我试图显示学校的所有课程,以及参加该特定课程的学生的总价值。因此,我很容易为学校开设每门课程。但是,我试图从该名单中的每个学生的名单表中抽出count()并将其反映在该表格行上。
所以回顾一下,每个课程有一个表行。试图让学生参加每个相应的课程。我的控制器查询基本上只是
$schools::School::findOrFail($id);
从那以后,我可以获得所有的课程和学生信息,但我无法弄清楚如何基本上将这种关系叠加到这样的东西:
school-> course-> roster->学生总数。
我甚至没有尝试将这一切保留在同一个查询中。我甚至无法弄清楚如何在控制器中进行查询,只是将变量中的最终值传递给视图。我完全可以在控制器中进行第二次查询以获得名单的价值,但是我不能在每个学校的多个课程中包围每个课程的一个名单。我迷惑自己输入这个问题大声笑。有人可以提供建议吗?
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');
}
}
答案 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 中,您将获得不同名单的学生数量。