2016-07-14 1 views
1

주어진 얻을, 각 사용자는 차일 부모 땜장이에 그런 Laravel 웅변 내가 여러 수준의 사용자 모델이 중첩 수준

public function children() { 

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

public function parent() { 

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

수 있습니다 :

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

을이 날의 모든 아이들을 제공 주어진 레벨의 사용자 (어린이의 성함 ...) : http://pastebin.com/8NeF7aP9

각 레벨의 어린이를 얻으려고합니다. 출력은 위의 결과와 같습니다 :

, 11 레벨 2 사용자가 될 것입니다 :

레벨 1은 사용자가됩니다 (12), 13 (아이들의 아이들)이 작업을 수행하는 방법에 대한

어떤 힌트?

+0

이제 아이를 중첩지고 – TheShun

+0

쉐마는 http://prntscr.com/bsoy64을 도울 수있는 아마 당신은 너무 그 질문을 다시 말해야한다. –

+0

모든 트리를 가져오고 있지만 특정 리프 노드를 가져올 수 없습니다. 예를 들어이 http://prntscr.com/bsoy64에서 레이어 2의 수를 얻으십시오. – TheShun

답변

0

쉐마 당신은 명확한 수준 여기

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'); 
    } 
} 

에 대한 모든 항목을 얻을 수 있습니다 http://prntscr.com/bsoy64

1

또한 명확한 사용자의 수준에 의해 아이를 얻을 수

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(); 
    } 
} 

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