Laravel 5.4关系
I have 3 models and a pivot table:
SchoolYear - model
id
Course - model
id
schoolyear_id
course_student - pivot table
course_id
student_id
Student - model
id
Relationships are:
a SchoolYear hasMany Course
a Course belongsToMany Student trough course_student
a Student belongsToMany Course trough course_student
What is the fastest, more elegant way to find the students rolled in to a schoolyear and also to be able to sort it by Student properties?
$year = SchoolYear::firstOrCreate(['anul'=>Carbon::now()->year]);
$courses = $year->courses;
$students = collect([]);
foreach($courses as $course){
$course_students = $course->students;
foreach($course_students as $course_student){
$students->push($course_student);
}
}
dd($year, $students);
我有3个模型和一个数据透视表: p>
SchoolYear - model
id p> blockquote>
课程 - 模型 p>
id p>schoolyear_id p> blockquote>
course_student - pivot table p>
course_id p>student_id p> blockquote>
学生模型 p>
id p> blockquote>
关系是: p>
一所SchoolYear有很多课程 p>
课程 belongsToMany学生通过course_student p>
学生所属的课程通过course_student p>
找到学生的最快,更优雅的方式是什么? 还能够按学生属性对其进行排序吗? p>
$ year = SchoolYear :: firstOrCreate(['anul'=> Carbon :: now() - > year ]); $ courses = $ year-> courses; $ students = collect([]); foreach($ courses as $ course){ $ course_students = $ course-> students; foreach($ course_students as $ course_student){ $ students-> push($ course_student); } } dd($ year,$ students) ; code> pre> div>
Eloquent provides a set of methods to query relationship existence. has()
if there are not conditions, or whereHas()
if there is a condition.
So, in your case, you want the students that have a related school year.
$year = SchoolYear::firstOrCreate(['anul'=>Carbon::now()->year]);
// assumes Student has a "courses" relationship,
// and Course has a "schoolYear" relationship
$students = Student::whereHas('courses.schoolYear', function ($query) use ($year) {
return $query->where('anul', $year->anul);
})
->get();
dd($year, $students);