Как мне вернуть все идентификаторы 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-й уровень, а не все уровни.
Вот что я пришел с:
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');
И вы получите все ваши дети идентификаторы.
Я надеюсь, что отвечаю на вопрос!
Других решений пока нет …