2017-03-14 2 views
0

Ich habe eine User Tabelle mit einer Selbstbeziehung.Wie hole ich alle Eltern in einer Selbstbeziehung?

hat die Tabelle die Felder wie folgt:

  • id
  • parent_id (FK User)
  • name

ein Benutzer einen Elternteil haben kann, und dieser Elternteil kann Habe ein Elternteil und so weiter bis unendlich (obwohl ich wahrscheinlich 3-4 Stufen gehen werde, setzt die Anwendung keine Grenzen).

Wie hole ich den gesamten Stammbaum von einem Benutzer, der keine Kinder hat (unten im Baumbenutzer), ausgenommen Geschwister.

Zum Beispiel: ich user1, seine Eltern haben, ist parent1 die eine grandparent1 hat. Wenn grandparent1 andere Kinder hat (wie zum Beispiel parent2), möchte ich das nicht holen. Nur user1 ->parent1 ->grandparent1. Gibt es eine Möglichkeit, Verbindungen so lange zu loopen, bis sie nicht gefunden werden?

EDIT1: Ich möchte wirklich QueryBuilder dafür verwenden. ein parent() -Methode eine foreach machen Aufruf, bis er aufgrund null zurückgibt wird Optimierung wahrscheinlich nicht die beste Lösung sein

Antwort

0

Versuchen mit diesem:

class User extends Model { 

    public function parent() 
    { 
     return $this->belongsTo('App\User', 'parent_id'); 
    } 

    public function children() 
    { 
     return $this->hasMany('App\User', 'parent_id'); 
    } 
} 
+0

Das habe ich bereits. Aber sollte ich das einfach in eine foreach setzen, bis 'parent() 'null zurückgibt? Es scheint ein bisschen nicht optimiert. Gibt es eine Möglichkeit, dies mithilfe des Abfrage-Generators zu tun? – Murilo

Verwandte Themen