问题描述
我正在学习laravel,尽管我找到了解决方案,但我想知道是否有一种“更好”或更多的“ laravel”方法。这是我有的工作解决方案:
(示例1)
$students = Subclass::query()
->join('student_subclass','subclasses.id','=','student_subclass.subclass_id')
->join('students','students.id','student_subclass.student_id')
->select('*')
->where('subclasses.id',$request->subclass_id)
->get();
我有3个表:子类,student和student_subclass作为数据透视表。上面的查询正确地返回了属于特定子类的学生(来自$ request)。 重要的是,它还返回了两个表中的所有字段。因此,在集合中,对于每个学生,我都有一个仅存在于子类表中的t_class_id字段。
如果我想像这样使用我的关系: (示例2)
$students = Subclass::findOrFail($request->subclass_id)->students;
这要优雅得多,但是我只能从students表中获得字段(这在大多数时候都可以)。因此...是否可以修改示例2,使其还为每个学生返回子类表中的字段? (不在数据透视表或学生表中的人)。或改写它。我们可以将示例1转换为示例2的类型,并准确地从示例1中获得结果吗?
解决方法
创建另一个关系:
public function students(): BelongsTo {
return $this->belongsTo(Student::class,'students'); }