извините за ненормативную лексику :) У меня есть таблица с такими многоуровневыми категориями:
category_id ------ category_name--------parent_id
1------------------sample 1 ------------ NULL
2------------------sample 2 ------------ 1
3------------------sample 3 ------------ NULL
а также...
теперь мне нужно, чтобы эти данные были в меню выбора параметров
это моя форма:
<div class = "form-group">
<label class = "col-sm-2 control-label">مادر</label>
<div class = "text-right col-sm-10">
<select name = "parent_id" class = "select2 form-control" id = "parent_id">
<option value = "">انتخاب دسته مادر</option>
@foreach ($categories as $cat)
<option value = "{{ $cat -> category_id }}"
{{ isset($productItem) && $productItem->category_id == $cat->category_id ? 'selected':'' }}
>{{ $cat -> category_name }}</option>
@endforeach
</select>
</div>
</div>
да, пожалуйста, смотрите ниже
Мой ответ то, что вы искали?






но на уровне 3 у меня проблема
и я изменил свой код:
<select name = "parent_id" class = "select2 form-control" id = "parent_id">
<option value = "">انتخاب دسته مادر</option>
@foreach ($categories as $cat)
@if ($cat -> parent_id == NULL)
<option value = "{{ $cat -> category_id }}">
{{ $cat -> category_name }}
</option>
@endif
@if ($cat->children->count() > 0)
@foreach($cat->children as $child)
<option value = "{{ $child -> category_id }}">
{{ $child -> category_name }}
</option>
@endforeach
@endif
@endforeach
</select>
Лучше отредактировать свой вопрос, чем публиковать обновление в качестве ответа.
Вы должны использовать <optgroup> для создания «вложенных» опций. Проверьте этот пример.
Ваш код будет:
<select name = "parent_id" class = "select2 form-control" id = "parent_id">
<option value = "">انتخاب دسته مادر</option> <!-- default -->
@foreach ($categories->where('parent_id', null) as $cat) <!-- first level only: no parent -->
<!-- if parent must also be selectable, you can add an option for it before its optgroup -->
<option value = "{{ $cat->category_id }}">
{{ $cat->category_name }}
</option>
@if ($cat->children->count()) <!-- if has children -->
<optgroup label = "{{$cat->category_name}}"> <!-- display parent optgroup and within child categories option -->
@foreach($cat->children as $child)
<option value = "{{ $child -> category_id }}">
{{ $child -> category_name }}
</option>
@endforeach
</optgroup>
@endif
@endforeach
</select>
Это должно создать:
<optgroup> для каждой родительской категории<option> размещен непосредственно перед optgroup для родительских категорий<option> для каждой дочерней категорииНадеясь найти ответ, который хорошо использует Laravel, я закончил тем, что сдался и просто написал код, чтобы делать то, что я хотел сам, и он оказался меньше, чем я ожидал.
public function get_categories()
{
$categories = Category::where('parent',null)->get();
while(count($categories) > 0){
$nextCategories = [];
echo "<option value='.$categories->.'>'.$categories->name .'</option";
foreach ($categories as $category) {
$childCategories = Category::where('parent',$category->id)->get();
echo "<option value='.$categories->.'>'.$childCategories->name .'</option";
}
}
}
Из того, что я вижу, ваш код не «заботится» об уровне категории / родителя. Это твоя цель?