2016-10-11 41 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(); 

,並加入預先加載查詢似乎沒有工作。我想也許使用點聯合和查詢它只查詢最後一個?我不確定。

我需要查詢查詢的每個級別,但我不知道如何。 任何幫助將不勝感激!

回答

0

UPDATE:看來我已經成功通過這樣做來解決這個問題...

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

但如果有這樣做的更短更有效的方式,請張貼:)