Example #1
0
 public function scopeUnrated($query, $course_id = null)
 {
     $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());
     $articlesWithoutAnyRating = Article::whereNotExists(function ($query) {
         $query->select(DB::raw(1))->from('ratings')->whereRaw('articles.id = ratings.article_id');
     })->whereIn('articles.id', $articlesTaskIds)->get(['articles.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();
     $articles = array_collapse([array_flatten($articlesWithoutAnyRating), array_flatten($articlesWithSomeRating)]);
     return $query->whereIn('id', $articles);
 }