'Trying to make multi filter function

am trying to do multi filter function but am having little problem...

this requests works fine but i need to add two more requests in it... and i really don't know how...

        $courses = Course::when($r->level, function ($query, $level) {
            return $query->where('level', 'like', "%{$level}%");
        })->when($r->category, function ($query, $category) {
            return $query->where('course_category_id', 'like', "%{$category}%");
        })->when($r->price && in_array($r->price, ['more-expensive', 'less-expensive']), function ($query) use ($r) {
                return $query->orderBy('price', $r->price == 'less-expensive' ? 'asc' : 'desc');
            }, function ($query) {
                return $query->orderByDesc('id');
            })->paginate(18);

am having top rated courses and discount courses.

  // discounts courses filter
        $discounts = Course::where('discount', '!=', null)->orderBy('id')->paginate(18);


        // top rated courses filter
        $itemsRated = DB::table('ratings')->select('course_id', DB::raw('AVG(stars_rated) as count'))
            ->groupBy('course_id')->orderBy("count", 'desc')->get();
        $courseIds = [];
        foreach ($itemsRated as $item) {
            array_push($courseIds, $item->course_id);
        }
        $fieldOrder = join(", ", $courseIds);

        $bestRated = Course::whereIn('id', $courseIds)->orderByRaw("FIELD(id, $fieldOrder)")->paginate(18);

both work but i need it in $courses Can someone please help me with this?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source