如何使用查询生成器查询数据透视表值?

时间:2019-06-07 13:56:51

标签: php laravel eloquent

我有两个模型和一个数据透视表:

Teacher Class

数据透视表为class_teacher。我正在运行一个动态查询,可以接收到一组班级ID,并且我想查看为他们分配了哪些老师。

一个班级可以有很多老师,而一个老师可以有很多班。

使用查询生成器查询此内容的最佳方法是什么?

到目前为止,我已经使用whereHas修饰符运行代码以拉入关系,然后使用whereIn来查看值是否存在。下面是一些代码:

return $builder->whereHas('classes', function ($query) use ($value) {
            $query->whereIn('class_teacher.class_id', $value);
        });

这不会触发错误,但是在某些情况下它不会返回任何结果。

我在做什么错了?

谢谢

1 个答案:

答案 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中的保留字,所以我不确定您可以那样使用它。