#php #laravel #hierarchy #laravel-7
#php #laravel #иерархия #laravel-7
Вопрос:
Я должен извлечь все левые и правые узлы определенного родительского узла. Это структура таблицы моей базы данных.
Schema::create('user', function (Blueprint $table) {
$table->id();
$table->string('code')->unique();
$table->string('parent_code');
$table->enum('position', ['left', 'right', 'root']);
});
$users= User::where('parent_code', $account->code)->where('position', 'left')->get();
$collect = new Collection();
do {
foreach ($users as $item) {
$level = User::where('parent_code', $item->code)->get();
foreach ($level as $lvlitem) {
$collect->push($lvlitem);
}
}
$users = $collect;
} while (!$users->isEmpty());
Я попытался выполнить цикл от моего родительского элемента к его узлам, но, похоже, чем глубже это происходит, тем больше времени это займет.
Есть ли лучший способ обхода дерева?
Комментарии:
1. помогло бы добавить к вашему вопросу код, который показывает, как вы получили эти результаты. Также будьте точны в отношении глубины желаемых результатов.
2. @N69S Я уже отредактировал свой вопрос с помощью моего текущего кода.
Ответ №1:
Я бы предложил использовать уже созданный и протестированный пакет для подобных вещей.
И я также могу порекомендовать этот пакет для вложенного дерева:https://github.com/lazychaser/laravel-nestedset
Комментарии:
1. Спасибо, что предложили этот пакет. Я уже рассматривал этот пакет, но подумал, могу ли я найти другой способ без использования пакетов.
2. Использование package (почти) всегда лучше, чем создавать что-то самостоятельно и изобретать велосипед. Пакет уже протестирован. Пакет уже задокументирован. Пакет создан давно, и многие пользователи уже добавили отзывы (пакет улучшен). Пакет уже готов, поэтому вы можете потратить время на свою бизнес-модель, а не создавать что-то, что является лишь вспомогательной частью. Конечно, когда вам нужна более конкретная логика, и вы не можете найти пакет для этого или пакет имеет низкое качество — собственный код лучше [обычно].