2015-09-07 34 views
0

我有这些模型,场地,评论,用户。 a用户可以为多个场地打分。
一个venue有许多reviews 一个review属于venueuser基于模型方法的筛选结果

我的场馆模型我有一个计算场地的分数的方法:

public function score() 
{ 
    $reviewCount = $this->reviews()->count(); 
    $qualitySum = $this->reviews()->sum('quality') * 2; 
    $decorSum = $this->reviews()->sum('decor'); 
    $venueAverage = ($qualitySum + $decorSum)/($reviewCount * 30); 
    $minReview = 5; 
    //based on weighted average and Barnsley average 
    $average = ($reviewCount * Review::R())/($reviewCount + $minReview) + ($minReview * $venueAverage)/($reviewCount + $minReview); 
    $average = round($average, 1); 
    return $average; 
} 

这里有一个问题:我怎么能检索那些分数大于3的场所
我如何根据分数排序结果

回答

0

看着http://laravel.com/docs/5.1/eloquent-relationships他们使用下面的例子:

// Retrieve all posts with at least one comment containing words like foo% 
$posts = Post::whereHas('comments', function ($query) { 
    $query->where('content', 'like', 'foo%'); 
})->get(); 

此基础上,你应该能够把约束到您的“评论” whereHas功能:

$venues = Venue::whereHas('location', function ($query) use ($city) { 
     $query->whereCityId($city->id); 
    }) 
     ->whereHas('cuisines', function ($query) use ($cuisine) { 
      $query->whereName($cuisine); 
     }) 
     ->whereHas('reviews',function($query) use ($minCount) 
     { 
      $query->where('score', '>', 3); 
     }) 
     ->take(3)->get(); 

你也可以通过添加得到计数 - >计数()在 - > get()之前或之后,这取决于你的用例。