2016-10-07 2 views
0

У меня есть две таблицы: users, comments.Как подсчитать среднее значение для каждого пользователя?

У каждого пользователя есть некоторые комментарии.

я запрос вроде как:

$users = User:with('comments')->get(); 

Как я могу посчитать среднее значение в поле comments.ratewhere users.id = comments.user_id

В результате я должен получить коллекцию всех строк wityh информации пользователя и поле avg_rate

Я попытался использовать ->avg(), но он возвращает только одну строку, а не для каждого

У меня есть собственное решение, но у меня есть желание перенести этот код в модели:

{{$users->reviewsAverage()->first()->avg("rate")}} 

Модель:

public function reviewsAverage() 
    { 
     return $this->hasMany('App\Review', 'user_id', 'id'); //->first()->avg('rate'); 
    } 
+0

Возможный дубликат [Laravel: как получить среднее значение для вложенных hasMany отношений (hasManyThrough)] (http://stackoverflow.com/questions/27698690/laravel-how-to-get-average-on-nested-hasmany -relationships-hasmanythrough) –

ответ

0

Есть две функции один для отношений, и он другой для средней функции

public function comments() 
{ 
    return $this->hasManyThrough('App\Comment', 'id'); 
} 

public function averageRating() 
{ 
    return $this->comments()->selectRaw('avg(rate) as average_rate, comment_id') 
          ->groupBy('comment_id'); 
} 

Затем идти вперед и запрос, как это

foreach($users as $user){ 
    $rate = $user->averageRate(); 
} 
Смежные вопросы