Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 22.04.2020 19:07:38

Реализация древовидных категорий

Добрый день.
Есть 3 таблицы: posts, catigories, category_post.
Собственно последняя реализует связь первых двух многие-ко-многим.
В таблице catigories есть поле parent_id, то есть родительская категория.

Допустим, структура древа категорий следующая:
1
1.1
1.2
  1.2.1
1.3
  1.3.1
  1.3.2
2
2.1
2.2

Собственно вопросы, их возникло два.
1) Как правильно найти дочерние категории, чтобы вывести публикации из них. То есть на странице категории 1.3 должны быть публикации из категорий 1.3, 1.3.1, 1.3.2, а на странице категории 1 все публикации с 1, 1.1, 1.2, 1.2.1, 1.3, 1.3.1, 1.3.2. Вот как реализовал я, знаю что не красиво и не правильно, но хоть работает.

$category = BlogCategory::where('slug', $slug)->first(); // получаю объект родительской категории
        $children = BlogCategory::where('parent_id', $category->id)->get(); // нахожу дочерние категории
        $categoriesId[] = $category->id; // записываю ид категорий в массив
        foreach ($children as $kid) {
            $children = BlogCategory::where('parent_id', $kid->id)->get(); // в каждой дочерней категории ищу её детей
            $categoriesId[] = $kid->id; // записываю их ид в массив
            foreach ($children as $kid) {
                $children = BlogCategory::where('parent_id', $kid->id)->get();
                $categoriesId[] = $kid->id; // повторяю это ещё раз, так как уровней категорий больше 3х, пробовал рекурсивно реализовать, но не получилось
                foreach ($children as $kid) {
                    $categoriesId[] = $kid->id;
                }
            }
        }

2) Выше приведенный код формирует массив с ид категорий, которые нужно вывести. Как сделать это? Тоже через foreach?

foreach ($categoriesId as $categoryId){
            $item = BlogCategory::where('id', $categoryId)->first();
            $posts[] = $item->posts;
        }

Такой код возвращает массив коллекций и дальнейший вывод публикаций на сайт не очень удобен, мягко говоря.
Как можно одним запросом получить эти публикации?

Не в сети

#2 08.05.2020 11:20:13

Alexsaab
Откуда: Москва
Сообщений: 92

Re: Реализация древовидных категорий

Добрый день.
Как вариант есть готовый модуль ставится через composer Baum/baum , но по моему там есть только реализация для 5 ветке Laravel - вообще все делается через google поиск скорее всего у вас проблемы в реализации самой структуры таблицы - вы поищите php tree algorithm 
Написать собственное функцию get_table_tree_structure - не очень сложно.

С ув., Алексей

Не в сети

Подвал раздела