我的模式的简化版本:
学生
student_bursaries
student_bursary_enrolments
student_bursary_enrolments_courses
我想在学生模型上有一个公共功能,这样我就可以直接获取它的所有课程。
例:
$id = 80;
$student = Student::findOrFail($id);
$courses = $student->courses();我试过这样的方法:
public function courses() {
return $this
->join('student_bursaries','student_bursaries.student_id','=','students.id')
->join('student_bursary_enrolments','student_bursary_enrolments.student_bursary_id','=','student_bursaries.id')
->join('student_bursary_enrolment_courses','student_bursary_enrolment_courses.student_bursary_enrolment_id','=','student_bursary_enrolments.id')
->select('student_bursary_enrolment_courses.id','student_bursary_enrolment_courses.course');
}但这只会返回“所有的课程”,而不是$this特有的课程--所以我必须给它传递一个id,这样就不符合"$this“的意思了。
这将是最终的解决方案,但我愿意走另一条路,做一些不属于模式的事情,比如:
$records = Student::with(['bursaries','bursaries.enrolments','bursaries.enrolments.courses'])->where('id',80)->get();但是这会返回许多模型,我只想要一个当然名称和ID的列表,所以我尝试了以下方法,但是它没有工作:
学生::带(“奖学金”,“助学金”,'bursaries.enrolments.courses')->where('id',80)->get()->pluck('bursaries.enrolments.courses.id','bursaries.enrolments.courses.course');
结果:
$records = Student::with(['bursaries','bursaries.enrolments','bursaries.enrolments.courses'])->where('id',80)->get()->pluck('bursaries.enrolments.courses.id','bursaries.enrolments.courses.course');
=> Illuminate\Support\Collection {#10344
all: [
"" => null,
],}
发布于 2022-11-10 13:17:22
由于您需要将结果作为课程的集合,所以您应该从该模型开始。
public function courses() {
return StudentBursaryEnrolmentsCourse::whereHas('enrolment', function($enrolment) {
$enrolment->whereHas('bursary', function($bursary) {
$bursary->where('student_id', $this->id);
});
})->get();
}或者独立于上下文$this
$studentId = 80;
$courses = StudentBursaryEnrolmentsCourse::whereHas('enrolment', function($enrolment) use ($studentId) {
$enrolment->whereHas('bursary', function($bursary) use ($studentId) {
$bursary->where('student_id', $studentId);
});
})->get();这假设(您可以将它们更改为实际设置):
课程类= StudentBursaryEnrolmentsCourse
您可以像这样在pluck()之前使用get()
$studentId = 80;
$courses = StudentBursaryEnrolmentsCourse::whereHas('enrolment', function($enrolment) use ($studentId) {
$enrolment->whereHas('bursary', function($bursary) use ($studentId) {
$bursary->where('student_id', $studentId);
});
})->pluck('courses.id','course');https://stackoverflow.com/questions/74388996
复制相似问题