繁体   English   中英

Laravel有很多关系计数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM