[英]Laravel hasMany relation count
我的索引网站上有很多Categories(Category.php),其中有很多Boards(Board.php)。 董事会可以有多个主题(Topic.php),一个主题可以有多个答复(Reply.php)。
我想获取当前板的回复数,可能是急于加载。
我有办法,但是它执行太多查询。 我创建一个post_count属性,然后遍历每个主题并收集答复数。 有没有办法从当前委员会中选择所有答复?
public function getPostCountAttribute()
{
$count = 0;
foreach ($this->topics()->withCount('replies')->get() as $topic) {
$count += $topic->replies_count;
}
return $count;
}
找到了一个不错的方法。 即使,如果有人找到更好的方法来解决这个问题,我也将保留这个问题。
我声明了hasManyThrough
关系,并称为count():
Board.php:
public function replies()
{
return $this->hasManyThrough(Reply::class, Topic::class);
}
然后调用:
$board->replies->count()
执行了30个查询(之前有45个查询)。
尽管如此,我还是想找到一种渴望的方式来加载数据,将查询数量减少到2或3个查询。
除了您的回复外,您还可以执行以下操作。
public function repliesCount() {
return $this->replies()->selectRaw('board_id, count(*) as aggregate')
->groupBy('board_id');
}
并如下使用
$board->repliesCount()
请注意,您必须根据自己的需要更改查询。
试试吧
更改
$count = 0;
foreach ($this->topics()->withCount('replies')->get() as $topic) {
$count += $topic->replies_count;
}
至
$topic_ids = $this -> topics -> pluck('id');
$reply_count = Reply::whereIn('id',$topic_ids) -> count();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.