我当前的方法如下:
public function overallAverage()
{
$ids = $this->reviews()->pluck('id')->all();
return Rating::where('rating_type_id', 0)
->whereIn('offer_review_id', $ids)
->avg('rating_value');
}
但是我不喜欢我首先需要摘除所有ID才能计算平均值。为了更好地理解,这里是我的表的图表:
因此,当我有要约时,我要计算rating_type_id为0的所有评分平均值。
1个要约有很多要约评论。一份要约评论具有许多评分(例如总体评分,口味评分,价值评分等)。
有了reviews(),我就拥有了很多关系
public function reviews(){
return $this->hasMany(OfferReview::class);
}
答案 0 :(得分:1)
是的,您可以使用laravel集合获得平均值。 Laravel为我们提供了许多收集助手功能,使我们可以灵活地计算值。
下面是avg
收集助手功能的使用
https://laravel.com/docs/5.7/collections#method-average
public function overallAverage()
{
$reviewTableName = $this->reviews()->getTable();
$query = "select id from $reviewTableName";
$avg = Rating::where('rating_type_id', 0)
->whereRaw("offer_review_id in ($query)")
->pluck('rating_value')
->avg();
return $avg;
}
我认为这会对您有所帮助。