Как получить вложенный список потомка по идентификатору родителя?


Я использую 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 2

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));
    }

Вы можете попробовать это?

$data=Category::where('id','yourid')->first()->descendants()->get()->pluck('text','id');