public function scopeRated($query, $course_id) { $course = Course::findBySlugOrId($course_id); $tasks = $course->tasks(); $tasksIds = $tasks->get(['id'])->toArray(['id']); $articlesTaskIds = array_flatten(Article::whereIn('task_id', array_flatten($tasksIds))->get(['id'])->toArray()); $articlesWithSomeRating = Article::whereExists(function ($query) { $query->select(DB::raw(1))->from('ratings')->whereRaw('articles.id = ratings.article_id')->where('ratings.text', '<>', ''); })->whereIn('articles.id', $articlesTaskIds)->get(['articles.id'])->toArray(); return $query->whereIn('id', array_flatten($articlesWithSomeRating)); }