Laravel模型中的withCount使用功能

时间:2019-04-17 17:43:11

标签: php laravel

我有模型Post:

 protected $guarded = [];

 public function reviews() {
      return $this->hasMany(Review::class);
 }

我的评论表的列类型值为:1(好),2(评论),3(负)。 我需要对每种类型进行计数评论。我需要全局获取这些计数。我知道我可以在模型中做这样的事情:

 protected $withCount = ['reviews'];

但这让我获得了所有评论。但是我只需要为每种类型计数。

2 个答案:

答案 0 :(得分:0)

您可以使用GroupBy方法。

类似这样的东西:

DB::table('reviews')
             ->select('type', DB::raw('count(*) as total'))
             ->groupBy('type')
             ->get();

答案 1 :(得分:0)

您可以使用withCount方法并在内部进行子查询:

$counts = Post::withCount([
'reviews',
'reviews as good_reviews' => function ($query) {
    $query->where('type', 1);
}],
'reviews as bad_reviews' => function ($query) {
    $query->where('type', 3);
}],

}])->get();

您可以像这样访问计数:

echo $counts[0]->good_reviews;

有关更多信息:Docs