【问题标题】:Count post with specific categories and tags laravel计算具有特定类别和标签的帖子 laravel
【发布时间】:2017-06-29 20:51:50
【问题描述】:

我有 3 个模型 Post, Tag and Category。 Post model 和 Tag model 与数据透视表是多对多关系,Post model 和 Category model 是一对多关系。

例如,假设我有以下标签和类别:

tag name = php,

category name = tutorial, project, testing

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

我正在尝试计算帖子并显示具有上述类别的类别名称并在名为 archive-php 的视图中标记 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个数组,但统计了数据库中的所有帖子。我在这里缺少什么难题或不可能?

【问题讨论】:

  • 您要统计类型为 [category] ​​且带有标签 [php] 的 [posts] 的数量?
  • 是的,这就是我想要做的。

标签: php mysql laravel laravel-5.3 blade


【解决方案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。如果我没听错的话。

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 2018-03-05
    • 1970-01-01
    • 2018-10-24
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多