Laravel вернуть все идентификаторы потомков

Как мне вернуть все идентификаторы AllSubSections (все уровни)

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

то, что я сейчас делаю, это:

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

но он возвращает только 1-й уровень, а не все уровни.

3

Решение

Вот что я пришел с:

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

Как видите, getAllChildren является рекурсивной функцией. Он содержит цикл над дочерними разделами, который добавляет в коллекцию текущий дочерний элемент и снова вызывает себя для этого дочернего элемента.

Затем вы можете использовать:

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

И вы получите все ваши дети идентификаторы.

Я надеюсь, что отвечаю на вопрос!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]