2017-02-11 9 views
0

У меня есть 3 модель Post, Tag and Category. Post model и Tag model находятся во многих отношениях со сводной таблицей и Post model и Category model находятся в одном из многих отношений.Количество сообщений со специальными категориями и тегами laravel

Например, давайте предположим, я следующие теги и категории:

tag name = php,

category name = tutorial, project, testing

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

Я пытаюсь сосчитать сообщения и название шоу категории, имеющие выше категории и теги php с учетом названий archive-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 

Приведенный выше код успешно отображается название соответствующей категории (3 категории) dd($posts); выдает 3 массива, но считает все сообщение в db. Какой кусок головоломки мне не хватает здесь, или это невозможно?

+0

Вы хотите посчитать количество [сообщений] типа [category] с тегом [php]? –

+0

Да, это то, что я пытаюсь сделать. –

ответ

1

Для этого вы должны получить все категории. А потом получить/кол-сообщения, которые имеют php тег

1 - метод

$categories = Category::all(); 

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

Затем использовать его как это:

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

Это может быть сделано путем простой способ что-то вроде:

2 - метод

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

Но я не уверен, правильно ли это. Попробуйте метод 1. Если я правильно вас понял.

+0

Спасибо, метод 1 работал для меня. –