2017-11-22 9 views
0

私は、再帰を避けるために、parent_id、レベル、ウェイトの順に1つのクエリですべてのリンクを取得しようとしています。Laravel 5.5複数レベルのメニュークエリの注文

私はモデル内で定義された再帰的関係を持っていますが、すべて正常に動作しますが、私はそれらを使わない方がいいです。

/** 
* Get parents recursive. 
* 
* @return mixed 
*/ 
public function parentRecursive() 
{ 
    return $this->parent()->with(['parentRecursive']); 
} 

/** 
* Parent. 
* 
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo 
*/ 
public function parent() 
{ 
    return $this->belongsTo(Link::class, 'parent_id'); 
} 

/** 
* Get children recursive. 
* 
* @return mixed 
*/ 
public function childrenRecursive() 
{ 
    return $this->children()->with(['childrenRecursive'])->orderBy('weight', 'asc'); 
} 

/** 
* Children. 
* 
* @return \Illuminate\Database\Eloquent\Relations\HasMany 
*/ 
public function children() 
{ 
    return $this->hasMany(Link::class, 'parent_id'); 
} 

ドロップダウンは、次のようになります。私は、ネストされたセット(例えばhttps://github.com/etrepat/baumパッケージ)を使用することを推奨し

-Level 1 
    --Level 1.1 
    --Level 1.2 
     ---Level 1.2.1 
     ---Level 1.2.2 
    --Level 1.3 
-Level 2 
    --Level 1.1 
-Level 3 
    --Level 1.1 
-Level 4 
    --Level 1.1 
-Level 5 

答えて

0

それはあなたが行うことができます:コレクション・ツリーを返し、正確に一つのクエリを取る

$tree = Category::where('name', '=', 'Books')->first()->getDescendantsAndSelf()->toHierarchy(); 

を。