2017-08-25 64 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