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
相关产品推荐
相关产品推荐

