【问题标题】:How to count how many articles belongs which category?如何计算有多少篇文章属于哪个类别?
【发布时间】:2017-05-10 09:47:38
【问题描述】:

我有这样的关系:

文章

 public function category()
    {
      return $this->belongsTo('App\Models\Categories');
    }

CATEGORY 有翻译

public function c_translations()
  {
    return $this->hasMany('App\Models\CategoryTranslations', 'category_id');
  }

在文章中我有类别 ID,在翻译中我也有 category_id。那么我如何计算每个类别有多少文章。有什么建议吗?

 $articles = Articles::all();
      foreach($articles as $article ){
      $articles_category = Articles::where('id',$article->id)->withCount('category')->first();

      }

我试过了,但所有类别总是得到 0

【问题讨论】:

  • 你的问题仍然没有任何意义。你能举一些你需要的例子吗?
  • 我想显示数据库中的所有类别以及该类别的文章数量​​span>

标签: laravel laravel-5 laravel-5.2


【解决方案1】:

使用withCount()方法统计关系。

Model::where('id', $id)->withCount('relation')->first();

如果您想在不实际加载关系的情况下计算关系结果的数量,您可以使用withCount 方法,该方法将在结果模型上放置一个{relation}_count 列。

【讨论】:

    【解决方案2】:

    我认为您应该使用 group by 语句。 您选择 category_id,COUNT(*) FROM article GROUP BY category_id 这将返回每个 category_id 的文章数

    【讨论】:

      【解决方案3】:

      在您的Category 模型中定义hasMany 关系为:

      public function articles()
      {
          return $this->hasMany('App\Models\Article');
      }
      

      那么你可以使用withCount来查询它:

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

      将它传递给您的视图,然后您就可以访问该编号。文章类别为:

      @foreach ($categories as $category)
        <li>{{ category->title }}</li>
        <li>{{ category->articles_count }}</li>
      @endforeach
      

      【讨论】:

        猜你喜欢
        • 2016-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-09
        • 1970-01-01
        • 2011-07-13
        相关资源
        最近更新 更多