2016-10-11 8 views
0

목표는 내 메뉴 모델에서 각 관련 하위 및 하위 관련 페이지가있는 트리를 만드는 것입니다.Laravel 각 레벨을 쿼리하는 도트 구문을 사용하는 중첩 된 관계

public static function tree() 
{ 
    return static::with(implode('.', array_fill(0, 100, 'children')))->with('Pages')->where('parent_id', '=', 0)->get(); 
} 

나는이 같은 내 모델 트리를 생성하고 있습니다

... 그러나 문제는 페이지와 관련된 각 차일을 받고 함께 제공됩니다. 나는이 시도했습니다 ...

return static::with([implode('.', array_fill(0, 100, 'children')) => function($query) { 
     $query->with('Pages'); 
    }])->with('Pages')->where('parent_id', '=', $id)->get(); 

과 열망 로딩 쿼리를 추가하는 작동하지 않았다. 내가 도트 sytax를 사용하여 그것을 마지막 쿼리 만 쿼리하는 것 같아요? 나는 그것에 관해 확실하지 않다.

각 수준의 쿼리를 쿼리해야하지만 어떻게해야할지 모르겠다. 도움을 주시면 대단히 감사하겠습니다!

답변

0

업데이트 : ... 내가이 일을하여이 문제를 해결하기 위해 관리했습니다

public static function genRelationalArray() 
{ 
$arr = [implode('.', array_fill(0, 100, 'children'))]; 
    for($i = 0; $i < 10; $i++) { 
     $item = 'children.Pages'; 
     $arr[] = $item; 
     $item = 'children.'. $item; 
    } 
    return $arr; 
} 

public static function treeFromId($id) 
{ 
    $childArr = static::genRelationalArray(); 
    return static::with($childArr)->with('Pages')->where('parent_id', '=', $id)->get(); 
} 

을 보이지만이 있다면이 일의 짧은보다 효율적인 방법은 :

을 게시하시기 바랍니다