首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -直接抓取所有孙辈(或作为数组)

Laravel -直接抓取所有孙辈(或作为数组)
EN

Stack Overflow用户
提问于 2022-11-10 12:26:58
回答 1查看 22关注 0票数 0

我的模式的简化版本:

学生

  • id

student_bursaries

  • id
  • student_id

student_bursary_enrolments

  • id
  • student_bursary_id

student_bursary_enrolments_courses

  • id
  • student_bursary_enrolment_id
  • course

我想在学生模型上有一个公共功能,这样我就可以直接获取它的所有课程。

例:

代码语言:javascript
复制
$id = 80;
$student = Student::findOrFail($id);
$courses = $student->courses();

我试过这样的方法:

代码语言:javascript
复制
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“的意思了。

这将是最终的解决方案,但我愿意走另一条路,做一些不属于模式的事情,比如:

代码语言:javascript
复制
$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');

结果:

代码语言:javascript
复制
$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,
 ],

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-10 13:17:22

由于您需要将结果作为课程的集合,所以您应该从该模型开始。

代码语言:javascript
复制
public function courses() {
    return StudentBursaryEnrolmentsCourse::whereHas('enrolment', function($enrolment) {
        $enrolment->whereHas('bursary', function($bursary) {
            $bursary->where('student_id', $this->id);
        });
    })->get();
}

或者独立于上下文$this

代码语言:javascript
复制
$studentId = 80;
$courses = StudentBursaryEnrolmentsCourse::whereHas('enrolment', function($enrolment) use ($studentId) {
    $enrolment->whereHas('bursary', function($bursary) use ($studentId) {
        $bursary->where('student_id', $studentId);
    });
})->get();

这假设(您可以将它们更改为实际设置):

课程类= StudentBursaryEnrolmentsCourse

  • Enrolments关系
  • 课程类=

您可以像这样在pluck()之前使用get()

代码语言:javascript
复制
$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');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74388996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档