使用关系将laravel查询转换为雄辩的

问题描述

我正在学习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'); }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...