在我的产品型号中,我定义了一个访问器,它返回产品的平均评级。
访问者看起来像这样:
public function getAverageRatingAttribute(){
if($this->reviews->count()){
$count = 0;
$rating = 0;
foreach ($this->reviews as $review) {
if($review->average_rating){
$rating += $review->average_rating;
$count++;
}
}
return $rating/$count;
}
return 0;
}
现在,在我的控制器中,我想根据average_rating属性过滤结果。像这样:
$products->where('average_rating', '>=', $rating);
发生以下错误。
Column not found: 1054 Unknown column 'average_rating' in 'where clause'
实现这一目标的正确方法是什么?
答案 0 :(得分:0)
你不应该为此创建一个访问者。您还可以创建两个查询并将所有评论加载到内存中,以计算平均评分。
请改用avg()
方法。
$average = Review::avg('average_rating');
$products = Product::whereHas('reviews', function($q) use($average) {
$q->where('average_rating', '>=', $average);
})->get();