2017-09-24 86 views
0

我有一個用戶表和一個審閱表。在Laravel中將查詢生成器轉換爲雄辯

在我的評論表中,有一個「star_rating」列。

我能得到平均「STAR_RATING」得分爲用戶使用以下查詢:

$star_rating = Review::where('artist_id', $user->id)->avg('star_rating'); 

然而,這並不當我打印出在刀片一堆用戶的工作也很好(我想在他們的名字旁邊顯示他們的平均star_rating)。

這就是爲什麼我想在我的User.php模型中有一個函數,我可以調用它來獲得用戶的平均星級評分。

public function getAvgStarRating() { 
    return $this-> // logic goes here //; 
} 

回答

0

在您的用戶模型添加這種關係:

public function reviews() 
{ 
    return $this->hasMany(Review::class, 'artist_id', 'id'); 
} 

然後加入這種方法來獲得星級評定

public function getAvgStarRating() 
{ 
    return $this->reivews->avg('star_rating'); 
} 

和平均,如果你需要顯示一組用戶的評級,它首先熱切地加載他們的評論(它更有效率)

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

Then

foreach($users as $user) { 
    $user->getAvgStarRating(); 
}