2016-05-07 15 views
0

多くのサブフォーラムを持つことができるフォーラムを検討してください。フォーラムのカテゴリ(is_category)はそれら内のスレッドを持つことはできませんLaravel - 「スレッド化された」レコードのレコードの総数を数える

idparent_idnameis_category

forums表には、このようなものです。ただし、parent_idはテーブルの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->threads->count()を行うことはできません。それは、各サブフォーラムが持つスレッド数を数えるだけだからです。私はまた、サブフォーラムのすべての子が持つスレッドの数を数えたいと思う。

+0

[Laravel再帰クエリの答え](http://stackoverflow.com/questions/22014903/laravel-query-builder-for-recursive-results-e-g-id-parent-id)。 – ourmandave

答えて

1

再帰で行うことができます。

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

ありがとうございます。上の '$ count = 0'は再帰を行うときに常にカウントを0にしています... –

+0

引数として最も深いsubforumで関数を実行すると正しいカウントが得られますか? – TheDrot

+0

申し訳ありませんが、私は他のコメントを削除しました。いいえ、それは正しいカウントを取得しません。 –

関連する問題