The "when" helper in the query builder is cool!
You can chain conditional clauses to the query without writing if-else statements.
Makes your query very clear:
class RatingSorter extends Sorter{    function execute(Builder $query)    {        $query            ->selectRaw('AVG(product_ratings.rating) AS avg_rating')            ->join('product_ratings', 'products.id', '=', 'product_ratings.product_id')            ->groupBy('products.id')            ->when(                $this->direction === SortDirections::Desc,                fn () => $query->orderByDesc('avg_rating')                fn () => $query->orderBy('avg_rating'),            );         return $query;    }}
Tip given by @mmartin_joo