【发布时间】: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();吗?