2016-07-14 29 views
1

gegeben werde ich habe ein mehrstufiger User-Modell kann jeder Benutzer haben Childs und ElternLaravel Eloquent verschachtelten Ebene

public function children() { 

    return $this->hasmany($this,'parent_id')->with('children'); 
} 

public function parent() { 

    return $this->belongsTo($this,'parent_id')->with('parent'); 
} 

Dann auf Kesselflicker:

$User = App\User::find(9) 
$user->children 

Dieses gib mir alle Kinder der gegeben Benutzer auf mehreren Ebenen (Cilds of childs ...): http://pastebin.com/8NeF7aP9

Ich versuche, die Kinder von jeder Ebene, mit der Ausgabe oben:

Ebene werden die Nutzer sein: 10, 11 Stufe 2 werden die Nutzer sein: 12, 13 (Kinder von Kindern)

Jeder Hinweis, wie Sie das tun?

+0

ein shema könnte http://prntscr.com/bsoy64 helfen – TheShun

+0

Sie sind jetzt Kinder verschachtelt zu werden, so dass Sie wahrscheinlich sollte die Frage umformulieren. –

+0

Ich bekomme den ganzen Baum, aber ich kann keinen bestimmten Blattknoten bekommen, zum Beispiel die Anzahl der Ebene 2 in diesem http://printscr.com/bsoy64 – TheShun

Antwort

1

Sie können helfen zu verstehen, alle Elemente für bestimmte Ebene

public function usersOnLevel($level) 
{ 
    if ($level == 1) { 
     return User::where('parent_id', null)->lists('id'); 
    } else { 
     return User::whereIn('parent_id', $this->usersOnLevel($level - 1))->lists('id'); 
    } 
} 

Hier ist meine Tabelle ausgegeben http://www.zimagez.com/zimage/screenshot2016-07-1423-17-39.php

Hier bekommen http://www.zimagez.com/zimage/screenshot2016-07-1423-15-45.php

Or Brauchst du etwas anderes?

1

Sie können auch Kinder von Ebenen für bestimmte Benutzer erhalten

public function usersOnLevel($level, User $startUser) 
{ 
    if ($level == 1) { 
     return User::where('parent_id', $startUser->id)->lists('id')->toArray(); 
    } else { 
     return User::whereIn('parent_id', $this->usersOnLevel($level - 1, $startUser))->lists('id')->toArray(); 
    } 
} 

Ausgang http://www.zimagez.com/zimage/screenshot2016-07-1423-18-50.php