簡體   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