2017-02-11 15 views
0

私は3モデルPost, Tag and Categoryを持っています。 Post modelTag modelはピボットテーブルと多対多の関係にあり、Post modelCategory modelは1対多の関係にあります。私は、カテゴリやタグの上にあるポストおよびshowカテゴリ名を数えるしようとしている特定のカテゴリとタグを含むポストを投稿するlaravel

tag name = php,

category name = tutorial, project, testing

no. of post having above attribute = 3 [ all post have different category, same tag]

たとえばのは、私はタグやカテゴリーを以下していると仮定しましょうビュー内のphparchive-phpという名前です。

これは私がこれまでにやっていることです:

コントローラでの私の方法

public function countTag() 
{ 
    $posts = Post::whereHas('tag', function($r) { 
      $r->where('name','=', "php"); 
     })->get(); 
    return view('archive-php') 
      ->withPosts($posts) 
} 

ビューで私のコード:

@foreach ($posts as $post) 
    <li><a href="#">{{ucfirst($post->category->name)}}</a> 
     {{$post->count()}} 
    </li> 
@endforeach 

上記のコードはsucessfully(関連カテゴリ名を示してい3カテゴリ名)dd($posts); 3つの配列をダンプしますが、db内のすべてのポストをカウントします。私がここで紛失しているパズルのどの部分か、それは不可能ですか?

+0

タグ[php]を持つ[カテゴリ]の[投稿]の数を数えますか? –

+0

はい、それは私がやろうとしていることです。 –

答えて

1

これを達成するには、すべてのカテゴリを取得する必要があります。

:それは簡単な方法でのような何かを行うことができます

@foreach ($categories as $category) 
    <li><a href="#">{{ucfirst($category->name)}}</a> 
     {{ $category->phpPosts->count() }} 
    </li> 
@endforeach 

:このようにそれを使用すると方法

$categories = Category::all(); 

foreach($categories as $category) { 
    $category->phpPosts = Post::where('category_id', '=', $category->id)->whereHas('tag', function($r) { 
      $r->where('name','=', "php"); 
     })->get(); 
} 

- そして/ phpタグ

1を持っている投稿をカウントします

2 - 方法

$categories = App\Category::with(['posts' => function ($query) { 
    $query->whereHas('tag', function($r) { 
      $r->where('name','=', "php"); 
     }); 
}])->get(); 

しかし、正しいかどうかはわかりません。方法1を試してください。私が正しくあなたを得たら。

+0

ありがとうございました。 –

関連する問題