You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中通过多对多关联查询学生作业的Eloquent方案咨询

使用 Eloquent 获取学生关联的作业解决方案

不需要自行编写复杂逻辑,利用 Eloquent 的关联查询能力就能实现需求,以下是几种可行方案:

方案一:通过关联筛选(WhereHas)

在 Student 模型中定义关联方法,利用 whereHas 嵌套关联筛选出该学生所属组的作业:

public function assignments()
{
    return Assignment::whereHas('group.students', function ($query) {
        $query->where('students.id', $this->id);
    });
}

调用方式:$student->assignments()->get();

方案二:从多对多关联中提取作业

先通过学生的组关联获取所有所属组,再提取各组的作业并去重:

public function assignments()
{
    return $this->belongsToMany(Group::class)
                ->with('assignments')
                ->get()
                ->pluck('assignments')
                ->flatten()
                ->unique('id');
}

调用方式:$student->assignments;(直接属性访问,已加载并处理完成)

方案三:数据库连接查询(Join)

直接通过 Join 语句关联三张表,性能更优,适合数据量较大的场景:

public function assignments()
{
    return Assignment::join('groups', 'assignments.group_id', '=', 'groups.id')
                     ->join('group_student', 'groups.id', '=', 'group_student.group_id')
                     ->where('group_student.student_id', $this->id)
                     ->select('assignments.*')
                     ->distinct();
}

调用方式:$student->assignments()->get();

三种方案都遵循 Eloquent 的使用规范,可根据实际业务场景选择合适的实现方式。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:55:27