2017-08-25 101 views
0

我在我的網站上有一個標籤系統,點擊標籤會將您帶到與該標籤關聯的項目列表。我想以這些項目(擊球手)的平均評分得分來評價他們,因此評分最高的擊球手首先顯示。我將如何做到這一點?在標籤系統上排序

我的表:

板球運動員:ID,姓名,COUNTRY_ID,評論:ID,等級,評論,Batsmen_id標籤:身份證,標記名Batsmen_tag(多對多表):batsmen_id,TAG_ID

目前我例如,我只需在標籤控制器中找到所有標籤($ id),然後使用帶關係的foreach來返回與該標籤相關的擊球手。控制器:那帶回板球運動員和HTML

當前TagController代碼

public function show($id) 
    { // $tag = Tag::find($id); 

return view('tags.show')->withTag($tag); 
} 

HTML:

@foreach($tag->batsmen as $tags) 

@endforeach 

這就是我如何找回沒有相關的標籤batsmens以及如何訂購它們在最高的AVG上:

$Batsmen = Batsmen::where('approved', '=', 1) 
->leftJoin('reviews', 'reviews.batsmen_id', '=', 'batsmen.id') 
->select('batsmen.*', DB::raw('AVG(ratings) as ratings_average')) 
->groupBy('id') 
->orderBy('ratings_average', 'DESC') 
->get(); 

那麼我如何把這兩個並拉回擊球員r對標籤感興趣並以最高的平均值排序?

回答

2

,你可以貪婪加載在你的控制器擊球手:

$tag = Tag::with(['batsmen' => function ($query) { 
    return $query->where('approved', '=', 1) 
      ->leftJoin('reviews', 'reviews.batsmen_id', '=', 'batsmen.id') 
      ->select('batsmen.*', DB::raw('AVG(ratings) as ratings_average')) 
      ->groupBy('id') 
      ->orderBy('ratings_average', 'DESC'); 
}])->where('id', $id)->first(); 
+0

這回來了一個語法錯誤的,任何想法訂單後? – dionarap

+0

@dionarap添加一個分號..我的不好;) – Ohgodwhy

+0

那裏關於男人?甚至無法看到自己的錯誤 – dionarap