【问题标题】:Convert laravel query as eloquent using relationships使用关系将 laravel 查询转换为 eloquent
【发布时间】:2021-01-26 19:48:17
【问题描述】:

我正在学习 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 个表:subclasses、students 和 student_subclass 作为数据透视表。上面的查询正确地返回了属于特定子类的学生(来自 $request)。 重要的部分是它还返回两个表中的所有字段。所以在我得到的集合中,对于每个学生,我也有只存在于子类表中​​的 t_class_id 字段。

如果我想使用我的关系,例如: (示例 2)

$students = Subclass::findOrFail($request->subclass_id)->students;

它更优雅,但我只从学生表中获取字段(这在大多数情况下都很好)。那么...有没有办法修改示例 2,以便它还为每个学生返回子类表中的字段? (那些不在数据透视表或学生表中的)。或者换个说法。我们能否将示例 1 转换为示例 2 的类型并得到示例 1 的准确结果?

【问题讨论】:

标签: laravel eloquent laravel-query-builder


【解决方案1】:

创建另一个关系:

public function students(): BelongsTo {
    return $this->belongsTo(Student::class, 'students'); }

【讨论】:

  • 我已经建立了关系,并且它们正在按预期工作。这不是这个问题的目的。不过感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-03
  • 2016-11-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 2013-10-03
  • 2017-07-19
相关资源
最近更新 更多