return $this
->restaurant
->select('restaurants.*')
->selectRaw('COALESCE(ROUND(AVG(reviews.rating),1), 0) as average_rating')
->leftJoin('reviews', 'reviews.restaurant_id', '=', 'restaurants.id')
->when($user_id, function($query, $user_id){
$query->where("restaurants.user_id", $user_id);
})
->groupBy('restaurants.id')
->when($request->from_rating, function($query, $from_rating){
$query->having('average_rating', '>=', $from_rating);
})
->when($request->to_rating, function($query, $to_rating){
$query->having('average_rating', '<=', $to_rating);
})->orderByDesc("average_rating")
->paginate(
$this->perPage,
['id', 'name', 'image', 'description', 'filesystem', 'created_at'],
'page',
$request->page
);
C'est la requête à laquelle je suis confronté. Enfin. J'ai réussi à la faire fonctionner, mais maintenant le problème est de regarder la ligne suivante,
$query->having('average_rating', '>=', $from_rating);
Cela provoque une erreur : colonne inconnue average_rating
. Je ne sais pas pourquoi. J'ai cette colonne dans le select ci-dessus.
J'ai également transformé ceci en une instruction SQL en utilisant la fonction toSql().
Résultat :
select
`restaurants`.*,
COALESCE(ROUND(AVG(reviews.rating),1), 0) as average_rating
from
`restaurants`
left join `reviews` on `reviews`.`restaurant_id` = `restaurants`.`id`
group by `restaurants`.`id`
having `average_rating` >= ? and `average_rating` <= ?
order by `average_rating` desc