首页 > 解决方案 > 在 laravel 中为博客类别创建计数器

问题描述

我正在为我的博客类别创建一个计数器。这应该出现在我的类别的右侧名称一侧。我正在使用带有变量附加​​的模型,之后我将在刀片中使用它以在一个跨度内显示我的结果。但我不太清楚如何在我的模型中使用计数。我在我的模型博客中这样做。

我的变量追加包含:

protected $appends = [
        'custom_fields',
        'has_media',
        'restaurant',
        'blog_category',
        'viewer',
        'postCounter',
    ];

我正在处理这个:

return $this->blogs()->count();

我在 blog 和 blog_category 之间有关系:

public function blogCategory()
    {
        return $this->belongsTo(\App\Models\BlogCategory::class, 'blog_category_id', 'id');
    }

我想在我的视图中出现例如:

innovation   (2)

在我看来,我正在这样做:

@foreach($categories as $category)
     <li><a href="{{ url('blogs/'.$category->name) }}">{{ trans('web.blog_category_'.$category->name) }}</a><span>{{$category->postCounter}}</span></li>
@endforeach

但总是返回 0,而且我有类别的帖子

更新

在此处输入图像描述

标签: phplaravelmodel-view-controllerlaravel-5.8

解决方案


使用laravel 关系 withCount,您可以轻松地做到这一点。如果你想计算一个关系的结果数而不实际加载它们,你可以使用 withCount 方法,它会{relation}_count在你的结果模型上放置一列。

withCount向您的查询添加方法

$categories = Category::withCount('blogCategory')->get();

您可以在 foreach 循环中访问计数

// $category->blogCategory_count
@foreach($categories as $category)
   <li>
      <a href="{{ url('blogs/'.$category->name) }}"> 
         {{trans('web.blog_category_'.$category->name) }}
      </a>
      <span>{{$category->blogCategory_count}}</span> 
   </li>
@endforeach


推荐阅读