2016-06-02 5 views
0

У меня есть проект с классами Semester, Course и Assignment.Laravel Query Multiple Count Count

Я хотел бы получить только семестров, которые имели по крайней мере один курс, связанный с ним, так что я сделал это:

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

Теперь я хочу получить семестры, которые имеют по крайней мере один курс, который имеет по крайней мере одно назначение связанные с ним.

В классе семестра у меня есть отношения hasMany с курсом, и в курсе, у меня есть отношения hasMany с заданиями. У меня также есть belongsTo для присвоения курсу и курсу на семестр.

Я попытался найти закрытие, но ни один из уроков, похоже, не связан с проверкой коллекции коллекции. Как я могу запустить этот код?

EDIT

После прочтения и тестирования больше, я обнаружил, что этот код работает: ответ

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

huuuk является другим подходом, но в равной степени справедлив и полезен.

ответ

0

Прежде всего определим hasManyThroughrelation в Semetster классе

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

, то вы можете достичь своей цели, как так

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

Большое спасибо! – Aaron