是否可以使用Eloquent并具有两个hasMany Relationships

时间:2018-09-14 07:20:31

标签: laravel eloquent

我当前的方法如下:

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才能计算平均值。为了更好地理解,这里是我的表的图表:

enter image description here

因此,当我有要约时,我要计算rating_type_id为0的所有评分平均值。

1个要约有很多要约评论。一份要约评论具有许多评分(例如总体评分,口味评分,价值评分等)。

有了reviews(),我就拥有了很多关系

public function reviews(){
    return $this->hasMany(OfferReview::class);
}

1 个答案:

答案 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;
}

我认为这会对您有所帮助。