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