Laravel查询多个收集计数

时间:2016-06-02 16:47:05

标签: laravel eloquent

我有一个包含学期,课程和作业的项目。

我想只获得至少有一门课程与之相关的学期,所以我这样做了:

Semester::has('courses', '>', '0')->get();

现在,我希望学期至少有一门课程至少有一个与之相关的作业。

在学期课程中,我与课程有hasMany的关系,而在课程中,我与作业有hasMany的关系。我还有belongsTo课程和课程分配。

我试过查找闭包,但没有一个教程似乎与检查集合的集合有关。我该如何运行此代码?

修改

在阅读和测试更多内容后,我发现此代码有效:

Semester::whereHas('courses', function ($query) {
    $query->has('assignments', '>', '0')
})->get();

huuuk的回答是一种不同的方法,但同样有效且有帮助。

1 个答案:

答案 0 :(得分:0)

首先在hasManyThrough

中定义Semetster relation
public function assignments() 
{
    return $this->hasManyThrough('App\Course', 'App\Assignment');
}

那么你就可以达到你的目标

Semester::has('assignments', '>=', '1')->get();