Level 28
I would split it up in two parts.
$tag = Tag::where('slug', $slug)->first();
$products = $tag->products()->where('approved', 1)
->leftJoin('reviews', 'reviews.products_id', '=', 'reviews.id')
->select('products.*', DB::raw('AVG(rating) as ratings_average' ))
->groupBy('id')
->orderBy('ratings_average', 'DESC')
->paginate(25);
That's still only 2 queries but you can use the paginate() method.