2017-11-22 3 views
0

Ich versuche, alle Links in einer Abfrage nach parent_id, level, Gewicht sortiert, um Rekursivität zu vermeiden.Laravel 5.5 Multi-Level-Menü Abfrage Reihenfolge

Ich habe rekursive Beziehungen im Modell definiert und alles funktioniert gut, aber ich würde es vorziehen, sie zu vermeiden.

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

Die Dropdown sollte wie folgt aussehen:

-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 

Antwort

0

I Nested Sets empfehlen die Verwendung von (z https://github.com/etrepat/baum Paket).

Es erlaubt Ihnen zu tun:

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

die eine Sammlung Baum zurückgibt und genau eine Abfrage.