2015-09-07 35 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()之前或之後,這取決於你的用例。