Рекурсивная функция для получения вложенных элементов с отношениями родитель-потомок
Я хотел получить данные вложенных категорий из таблицы MySQL в Laravel 7.
Это таблица MySQL:
------------------------
|id | name | parent_id |
|---|------|-----------|
| 1 | A | NULL |
|---|------|-----------|
| 2 | B | NULL |
|---|------|-----------|
| 3 | C | NULL |
|---|------|-----------|
| 4 | a | 1 |
|---|------|-----------|
| 5 | ab | 4 |
|---|------|-----------|
| 6 | bc | 4 |
|---|------|-----------|
| 7 | ca | 4 |
|---|------|-----------|
| 8 | b | 2 |
|---|------|-----------|
| 9 | 2b | 8 |
|---|------|-----------|
|10 | 3b | 8 |
|---|------|-----------|
|11 | c | 3 |
|---|------|-----------|
Мне нужен следующий результат:
A
a
ab
bc
ca
B
b
2b
3b
C
c
Мой текущий код (в контроллере):
public function sort_category($data, $opt){
$contents = Category::where('category_id', $data)->get();
foreach($contents as $c){
$opt .= "<option value='".$c->id."'>".$c->name."</option>";
$count = Category::where('category_id', $c->id)->count();
if($count > 0){
return $this->sort_category($c->id, $opt);
}
}
return $opt;
}
public function add_category_form(){
$opt = '';
$html = $this->sort_category(NULL, $opt);
return view('admin.add_category', ['categories' => $html]);
}
Текущий выход:
A
a
ab
bc
ca
Как видите, он не проходит через B и C. Любая помощь приветствуется.
1 ответ
Решение
У вас есть оператор возврата внутри цикла foreach.
Это приводит к тому, что только первое значение с category_id
обрабатывается, а не другие.
Вы не должны возвращаться напрямую, а должны сохранять возвращаемые значения, например, в массиве и возвращаться после цикла.