@turindd

Как собрать обратное меню на laravel?

Всем привет.

Пробую собрать обратное меню на ларе. Чет не получается!
ко мне приходят последние подкатегории, например (выделил жирным):
одежда->женская->джинсы
одежда->женская->брюки
одежда->мужская->повседневная->джинсы
одежда->мужская->повседневная->брюки

вообщем мне мужно получить коллекцию всех категорий!

Пробую так:
function catNet($categories, $array = null){
            //$array = $categories;
            if($array == null){
                //dd(1);
                $array = collect();
                foreach ($categories as $category){
                    if($category->parent AND !$categories->firstWhere('id', $category->parent->id)){
                        $categories = $categories->add($category->parent);
                        $array = $array->add($category->parent);
                    }
                }
                return catNet($categories,$array);
            }elseif(!$array->isEmpty()){
                //dd(2);
                foreach ($array as $category){
                    if($category->parent AND !$categories->firstWhere('id', $category->parent->id)){
                        $categories->add($category->parent);
                        $array->add($category->parent);
                    }
                }
                return catNet($categories,$array);
            }else{
                //dd(3);
                return $categories;
            }

        }

        $res = catNet($categories);
        dd($res);


Если есть возможность подскажите пжл как собрать но с фунциями замыкания (для себя):
пробую так тоже не выходит
$result2 = function ($item) use ($categories){
            if($item->parent && !$categories->firstWhere('id', $item->parent->id)){
                $categories->add($item->parent);
            }
        };

        $categories->each(function ($item) use ($result2){
            $result2($item);
        });
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега Laravel
В вашем коде и описании ничего не понятно, но обычно эта задача решается так:
$menu = [$category];

$parent = $category->parent;

while ($parent) {
  $menu[] = $parent;

  $parent = $parent->parent;
}

$menu = array_reverse($menu);
Ответ написан
@turindd Автор вопроса
$result2 = function ($item) use ($categories){
    while($item->parent_id !== 0 && !$categories->firstWhere('id', $item->parent_id)){
        $categories->add($item->parent);
            $item = $item->parent;
        }
};

$categories->each(function ($item) use ($result2){
    $result2($item);
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы