Laravel 5.8 создает рекурсивную коллекцию - PullRequest
0 голосов
/ 31 октября 2019

У меня есть таблица, которая содержит филиалы, отделы и команды. В филиале может быть много отделов, а в отделе может быть много команд. Класс называется 'Organisation`.

Таблица organisations:

id    parent_id   type   name
1     null        b      Branch1 
2     null        b      Branch2
3     1           d      Dep1
4     2           d      Dep2
5     3           t      Team1
6     4           t      Team2

Я пытаюсь создать в классе метод, который будет рекурсивно возвращать все дочерние записи для данной позиции. в дереве.

У меня есть связь с именем children:

/**
 * Children
 */
public function children()
{
    return $this->hasMany(Organisation::class, 'parent_id', 'id');
}

Я создал метод с именем tree в классе следующим образом:

/**
 * Organisation Tree
 */
public function tree()
{
    $merged = new Collection;

    foreach($this->children as $child) {
        $merged->merge($child->tree());
    }

    return $merged;
}

Так, например:

$o = Organisation::find(1);

$treeCollection = $o->tree();

И $treeCollection должен содержать:

id    parent_id   type   name
1     null        b      Branch1 
3     1           d      Dep1
4     3           t      Team1

Но вышеприведенный метод возвращает пустую коллекцию и не дает сбоя. Что я пропустил?

1 Ответ

0 голосов
/ 31 октября 2019

Это было мое решение:

/**
 * Organisation Tree
 */
public function tree()
{
    $merged = new Collection;

    $merged = $merged->merge($this->children);

    foreach($this->children as $child) {
        $merged = $merged->merge($child->tree());
    }

    return $merged;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...