Laravel - 计算“线程”记录中的记录总数

Posted

技术标签:

【中文标题】Laravel - 计算“线程”记录中的记录总数【英文标题】:Laravel - count the total number of records in "threaded" records 【发布时间】:2016-05-07 13:04:58 【问题描述】:

考虑一个论坛,它可以有很多子论坛,而子论坛又可以有更多的子论坛。

我的forums 表是这样的:

idparent_idnameis_category

论坛类别 (is_category) 中不能有话题。但是,它可以有parent_idforums 表中的id;这是我可以在论坛中放置子论坛的一种方式。简而言之,一个论坛可以有很多子论坛,可以有更多的子论坛,可以有更多的子论坛等等......

演示记录:

| id | parent_id | name              | is_category |
|----|-----------|-------------------|-------------|
| 1  | 0         | Suggestions       | 1           |
| 2  | 1         | site suggestions  | 0           |
| 3  | 1         | forum suggestions | 0           |
| 4  | 2         | bugs              | 0           |

我的看法:

@if ($forum->hasSubforum())
    @foreach ($forum->subforums as $subforum)
         $subforum->name 

        <h1>subforums</h1>
        @if ($forum->hasSubforum())
        @foreach ($subforum->subforums as $child)
             $subforum->name 
        @endforeach
        @endif
    @endforeach
@endif

我尝试过的:

$threads = 0;
while(!$forum->subforums->isEmpty()) 
    $threads += $forum->threads->count();
    while(!$forum->subforums->isEmpty()) 
        $threads += $forum->threads->count();
    

这甚至都行不通... :(

TL;DR 如您所见,我将子表单显示给用户。但是如果我想显示一个子论坛有多少帖子呢?请注意,一个子论坛可以有更多的子论坛,然后可以有很多线程。我不能简单地做$subforum-&gt;threads-&gt;count(),因为那只会计算每个子论坛拥有的线程。我也想统计一下子论坛所有子论坛的线程数。

【问题讨论】:

Laravel recursive query answers. 【参考方案1】:

你可以用递归来做到这一点。

function countThreads($forum) 
    $count = $forum->threads->count();
    if ($forum->hasSubforum())  
        foreach ($forum->subforums as $subforum) 
            $count += countThreads($subforum);
        
    
    return $count;

【讨论】:

谢谢。顶部的 $count = 0 在进行递归时总是将计数设为 0... 如果你以最深的子论坛作为参数运行函数,你得到正确的计数吗? 对不起,我删除了我的其他评论。不,它没有得到正确的计数。 那么问题出在其他地方,因为对于最深的子论坛,递归不会执行,它应该给你与直接调用 $deepestSubforum->threads->count() 相同的计数。 对不起,我再次检查,它确实得到了当前计数。我查了一个不是最深的论坛。所以是的,它确实得到了当前的计数。

以上是关于Laravel - 计算“线程”记录中的记录总数的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 中的记录总数(我啥时候完成计数?)

分页总数计算,根据总记录数获取分页总数_目标科技

用于计算记录数的 SQL 查询必须与记录总数匹配

计算总数然后在MySQL中列出一组记录的最快方法

使用 Laravel 限制多态多对多关系中的相关记录

laravel 检查金额是不是在记录之间