Laravel - 计算"线程"中的记录总数。记录

时间:2016-05-07 13:04:59

标签: php multithreading laravel

考虑一个论坛,可以有许多子论坛,可以有更多的子论坛。

我的forums表格如下:

idparent_idnameis_category

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

演示记录:

| 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->threads->count(),因为这只会计算每个子论坛所具有的线程。我还想计算子论坛所有孩子的线程数。

1 个答案:

答案 0 :(得分:1)

你可以用递归来做。

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