2016-05-09 10 views
0

こんにちは!Laravel eloquent:order byタグで検索タグ番号

私は関係があります:タグとスニペットの間のManyToMany(ピボットテーブルを介して:snippet_tag)。

スニペットリストにタグで検索したいと考えています。問題は、検索されたタグの数で検索結果を並べる方法です。ここ

が私のコードである:

1スニペット:1個のタグが見つかりました(緑色タグ)

以下の例で

 $tags = explode(" ", $tags); 
     $snippets = Snippet::whereHas('tags', function ($q) use ($tags, $tags_db_table) { 
      $q->WhereIn($tags_db_table.'.name', $tags); 
     })->paginate(10); 

、I 5件の結果を与えた4個のタグを有します

2番目のスニペット:3タグが見つかりました(緑色のタグ)

3スニペット:2個のタグが見つかりました(緑色タグ)

4スニペット:2個のタグが見つかった(緑色タグ)

5スニペット:2個のタグが見つかった(緑色タグ)

2番目のスニペットを最初に表示する方法(3つのタグがあります)、1番目の結果が最後に表示される(1つのタグが見つかりました)

ありがとう!私は最終的にそれをやった

Search by tags with eloquent

答えて

0

!あなたが私と同じ問題を抱えているなら、答えはここにあります。 あなたが最適化しているなら、私は喜んで知っているでしょう。 おかげ

<?php 
 

 
     $snippets = \DB::table('tags as t') 
 
        ->join('snippet_tag', 't.id', '=', 'snippet_tag.tag_id') 
 
        ->leftJoin('snippets as s', 's.id', '=', 'snippet_tag.snippet_id') 
 
        ->WhereIn('t.name', $tags) 
 
        ->select(['s.id', 's.title', \DB::raw('COUNT(og_t.id) AS found_tags_number')]) 
 
        ->groupBy('s.id') 
 
        ->orderBy('found_tags_number', 'DESC') 
 
        ->paginate(10); 
 

 
     foreach ($snippets as $k => $snippet) { 
 
      $snippets[$k]->tags = \DB::table('tags') 
 
            ->join('snippet_tag', 'tags.id', '=', 'snippet_tag.tag_id') 
 
            ->where('snippet_tag.snippet_id', '=', $snippets[$k]->id) 
 
            ->select('name') 
 
            ->get(); 
 
     }