Как заполнить список выбора с помощью рекурсивной функции? - PullRequest
0 голосов
/ 17 октября 2019

В моем приложении Laravel у меня есть собственная таблица ссылок (термины) следующим образом:

Id  Name            Slug         Parent
4   Home            home          0
5   Travel          travel        0
6   Beauty          beauty        0
7   Parenting       parenting     0
8   Cooking         cooking       4
9   Skin Care       skin-care     6
10  Hair Care       hair-care     6
11  Facial          facial        6

Мне нужно заполнить раскрывающийся список, показывающий взаимосвязь вложенности. Я создал самореферентные отношения в терминах модели

public function terms()
 {
    return $this->hasMany('App\Admin\Term', 'parent');
 }

В контроллере у меня есть следующий код:

$terms = \App\Admin\Term::where('parent',0)->get(); 

function buildT($terms, $level=1){
    foreach($terms as $term){
        return  "<option>". str_repeat("-", $level) . $term->name . "</option>";
         if ( count($term->terms)){
             buildT($term->terms, $level+1);
         } 
    }
} 

echo "<select>" . buildT($terms) . "</select>";

Я понимаю, что не правильно пишу код. Мне не понятно, как вернуть значение рекурсивной функции. Не могли бы вы мне помочь написать код, чтобы выходные данные представляли собой список выбора (раскрывающийся список, показывающий вложенные отношения).

1 Ответ

1 голос
/ 17 октября 2019
  1. Вам нужно что-то сделать с возвращаемым значением вложенной функции
  2. Вам нужно добавлять результаты, а не return их сразу - вместо этого добавьте текст в переменную,и вернуть это в конце. .
$terms = \App\Admin\Term::where('parent',0)->get(); 

function buildT($terms, $level = 1) {
    $result = '';
    foreach ($terms as $term) {
        $result .= "<option>". str_repeat("-", $level) . $term->name . "</option>";
        if (count($term->terms)) {
            $result .= buildT($term->terms, ++$level);
        } 
    }
    return $result;
} 

echo "<select>" . buildT($terms) . "</select>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...