我有两个模型和一个数据透视表:
Teacher
Class
数据透视表为class_teacher
。我正在运行一个动态查询,可以接收到一组班级ID,并且我想查看为他们分配了哪些老师。
一个班级可以有很多老师,而一个老师可以有很多班。
使用查询生成器查询此内容的最佳方法是什么?
到目前为止,我已经使用whereHas
修饰符运行代码以拉入关系,然后使用whereIn
来查看值是否存在。下面是一些代码:
return $builder->whereHas('classes', function ($query) use ($value) {
$query->whereIn('class_teacher.class_id', $value);
});
这不会触发错误,但是在某些情况下它不会返回任何结果。
我在做什么错了?
谢谢
答案 0 :(得分:0)
您可以在模型上定义您的关系,然后在这种简单情况下无需使用查询构建器。
例如,在您的Class
模型中添加以下内容:
public function teachers()
{
return $this->belongsToMany(Teacher::class);
}
然后您可以致电:
// $values should be an array of class ids
$classes = Class::whereIn('id', $values)->with('teachers')->get();
对每个班级进行迭代将为您分配分配给该班级的老师。 另一件事是,Class是PHP中的保留字,所以我不确定您可以那样使用它。