Laravel по-русски

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

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

#1 09.01.2016 10:04:27

Категории и дочерние категории

Подскажите как можно реализовать метод для выбора дерева дочерних категорий, и также всего дерева.
Структура БД:

PHP
$table->increments('id');
$table->string('name')->unique();
$table->integer('parent_id')->unsigned()->nullable();
$table->timestamps();

Я уже реализовал методы, для проверки существования категории, для проверки наличия дочерних категорий, для проверки наличия родительной категории, для выборки родительной категории, для выборки дочерних категорий(только на один уровень), для выборки всех родительных категорий. И на этом у меня кончилась фантазия T_T, как вообще строиться это дерево?

Изменено Alex5000 (09.01.2016 10:08:16)

Не в сети

#2 10.01.2016 00:47:51

Re: Категории и дочерние категории

из быстрых решений:
- рекурсивный забор данных (1000 элементов = 1000 простых селектов, нет, это не тормоз, даже быстрее пары join'ов), но в принципе ужа давно неправильно.
- показывать уровень. клик по элементу-папке = догрузка внутренностей.
из сложных решений - надо тз читать и проектировать нагрузку из заданной аудитории (кол-во уникалов в 15 минут и в сутки)

Не в сети

#3 11.01.2016 03:01:23

Re: Категории и дочерние категории

Делается один запрос в базу, формируется массив вида

array[parent_id]=['id'=id,'name=name]

Затем рекурсивной функцией обходишь этот массив и строишь дерево. Блин да дофига таких примеров в гугуле.
Вопрос даже к ларавелю отношения не имеет.

Не в сети

#4 11.01.2016 12:28:54

Re: Категории и дочерние категории

Afatar пишет:

Делается один запрос в базу, формируется массив вида

array[parent_id]=['id'=id,'name=name]

Затем рекурсивной функцией обходишь этот массив и строишь дерево. Блин да дофига таких примеров в гугуле.
Вопрос даже к ларавелю отношения не имеет.

Да, к сожалению очень много необразованных людей.
И да пусть нет образования, но алгоритмостроение-то должно присутствовать в голове. Без логического склада ума делать в программировании нечего sad.

Не в сети

#5 01.05.2019 19:12:00

Re: Категории и дочерние категории

Может кому пригодится.
Модель Category

public static function children($parent=null) {
   return Category::where('parent_id',$parent)->orderBy('name','desc')->get();
}

Контроллер

public function add() {
     $categories = Category::children(null);
     return view('orders.add', compact('categories'));
}

И сам вывод на страницу

<div class="form-group mb-4">
                        <label for="" class="text-dark">Категория</label>
                        <select name="" class="form-control select text-dark">
                            <option value=""></option>
                            @foreach($categories as $cat)
                                <option value="{{$cat->id}}">{{$cat->name}}</option>
                                @foreach($cat->children($cat->id) as $item)
                                    <option value="{{$item->id}}">&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;{{$item->name}}</option>
                                    @foreach($cat->children($item->id) as $item1)
                                        <option value="{{$item1->id}}">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;{{$item1->name}}</option>
                                    @endforeach
                                @endforeach
                            @endforeach
                        </select>
                    </div>

Результат примерно таков будет https://ibb.co/cbZ1gZ2

Ну а дальше, если у вас куча под категорий по аналогии делать

Не в сети

#6 01.05.2019 20:24:08

Re: Категории и дочерние категории

https://github.com/lazychaser/laravel-nestedset

Изменено hzone (01.05.2019 20:24:38)

Не в сети

#7 02.05.2019 07:10:40

Re: Категории и дочерние категории

https://github.com/AdrianSkierniewski/eloquent-tree - вроде как на Adjacency List


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#8 02.05.2019 07:17:10

Re: Категории и дочерние категории


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

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