2017-01-01 3 views
2

zurückkehren Wie kann ich alle IDs von AllSubSections (alle Ebenen) RückLaravel alle IDs von Nachkommen

class Section extends Model 
{ 
    public function Ads() 
    { 
     return $this->hasMany(Ad::class); 
    } 

    public function AllSubSections() 
    { 
     return $this->SubSections()->with('AllSubSections'); 
    } 

    public function SubSections() 
    { 
     return $this->hasMany(Section::class); 
    } 

    public function Parent() 
    { 
     return $this->belongsTo(Section::class); 
    } 
} 

was derzeit tue, ist:

$section = Section::where('name', 'Properties')->first(); 
$subSections = $section->AllSubSections; 
$subSections->pluck('id') 

aber es gibt nur die erste Ebene nicht alle Ebenen.

+1

'$ section = Abschnitt :: where ('name', 'Eigenschaften') -> get() -> first();' Warum? '$ section = Section :: where ('name', 'Properties') -> first();' Benutze stattdessen –

+0

@RajenderJoshi, ich testete, vermisste es herum und vergaß es zu ändern. – Abanoub

Antwort

0

Hier ist, was ich kam mit:

use Illuminate\Support\Collection; 

class Section 
{ 
    public function children() 
    { 
     return $this->hasMany(Section::class,); 
    } 

    public function parent() 
    { 
     return $this->belongsTo(Section::class); 
    } 

    public function getAllChildren() 
    { 
     $sections = new Collection(); 

     foreach ($this->children as $section) { 
      $sections->push($section); 
      $sections = $sections->merge($section->getAllChildren()); 
     } 

     return $sections; 
    } 
} 

Wie Sie sehen können, getAllChildren ist eine rekursive Funktion. Es enthält eine Schleife über die untergeordneten Abschnitte, die der Auflistung das aktuelle untergeordnete Element hinzufügt und sich selbst erneut für dieses untergeordnete Element aufruft.

können Sie dann verwenden:

$section->getAllChildren()->pluck('id'); 

Und Sie werden ids alle Ihre Kinder bekommen.

Ich hoffe, ich reagiere auf die Frage!

Verwandte Themen