2016-05-07 12 views
0

Betrachten Sie ein Forum, das viele Unterforen haben kann, die mehr Unterforen haben können.Laravel - zählen Sie die Gesamtzahl der Datensätze in "Threaded" Datensätze

Meine forums Tabelle ist wie folgt:

id, parent_id, name, is_category

Ein Forum Kategorie (is_category) nicht Fäden in ihnen haben. Es kann jedoch die parent_id ist die id in der forums Tabelle; Auf diese Weise kann ich ein Unterforum in einem Forum einrichten. Kurz gesagt, kann das Forum viele Unterforen, das viele weitere Unterforen haben kann, die mehr Unterforen und so weiter ...

Demo Datensätze haben:

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

Meine Ansicht:

@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 

Was ich versucht habe:

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

Dies gilt nicht einmal arbeiten ... :(

TL; DR Wie Sie sehen können, zeige ich die Unterformulare einem Benutzer an. Aber wenn ich anzeigen möchte, wie viele Beiträge ein Unterforum hat? Bitte beachten Sie, dass ein Unterforum mehrere Unterforen haben kann, die dann viele Threads haben können. Ich kann nicht einfach $subforum->threads->count() tun, da dies nur die Threads zählt, die jedes Unterforum hat. Ich möchte auch die Anzahl der Threads zählen, die alle Kinder des Unterforums haben.

+0

[Laravel rekursive Abfrage Antworten] (http://stackoverflow.com/questions/22014903/laravel-query-builder-for-recursive-results-e-g-id-parent-id). – ourmandave

Antwort

1

Sie können es mit Rekursion tun.

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

Danke dafür. Das '$ count = 0 'an der Spitze macht immer die Zählung 0, wenn es Rekursion tut ... –

+0

Wenn Sie die Funktion mit tiefstem Unterforum als Argument laufen lassen, erhalten Sie korrekte Zählung? – TheDrot

+0

Entschuldigung, ich habe meinen anderen Kommentar gelöscht. Nein, es wird nicht korrekt gezählt. –

Verwandte Themen