Как получить вложенный список потомка по идентификатору родителя?
Я использую baum для получения вложенного списка категорий. У меня есть случай, когда я хочу получить только ребенка с несколькими родительскими идентификаторами. Я использовал статическую функцию getNestedList("name", null, " ")
, которая дает мне вложенный список всех категорий, разделенный пробелом. Я хочу получить тот же ответ, но только для нескольких родительских категорий.
Я попытался ниже кода получить свой список с предложением where, но он работает только с первым результатом. У меня есть несколько parent_id, и мне нужно, чтобы каждый ребенок был указан в массиве с пробелом оператор.
$node = Category::where('name', '=', 'Some category I do not want to see.')->first();
$root = Category::where('name', '=', 'Old boooks')->first();
var_dump($root->descendantsAndSelf()->withoutNode($node)->get());
ОБНОВЛЕНИЕ ВОПРОСА
Проблема, с которой я столкнулся, чтобы получить список потомков и самокатегорий с помощью Baum, была просто из-за неправильного ввода в мою базу данных. Я сожалею об этом. Теперь я получаю свой список категорий с помощью descendantsAndSelf()
, но вопрос в том, как создать вложенный список с помощью $seperator
?
Я пытался toHierarchy()
, но он только возвращает вложенную коллекцию. Я не нашел ни одной функции, которая предоставляет вложенный список, как функция getNestedList("text", null, " ");
. Пожалуйста, помогите мне этот.
2 ответа:
ОБНОВЛЕННЫЙ ОТВЕТ
Согласно моему обновленному вопросу, Ниже приведен мой ответ, что я на самом деле хочу сделать.
Для получения списка потомков с родителем я использовал нижеприведенную функцию.
public function getSubcategory($id) { $node = $this->where('id', $id)->with('children')->first(); $descendant = $node->getDescendantsAndSelf()->toArray(); return $this->CreateNestedList("text", $descendant, null, "-"); }
И для создания вложенного цикла я использовал ту же логику функция
getNestedList()
. Я создал новую функцию внутри моей модели файл, как показано ниже.public function CreateNestedList($column, $data, $key = null, $seperator = ' ') { $key = $key ?: $this->getKeyName(); $depthColumn = $this->getDepthColumnName(); return array_combine(array_map(function($node) use($key) { return $node[$key]; }, $data), array_map(function($node) use($seperator, $depthColumn, $column) { return str_repeat($seperator, $node[$depthColumn]) . $node[$column]; }, $data)); }