@lev89

Как вывести в шаблоне группу селектов?

Мне нужно вывести группу фильтров через HTML-элемент optgroup, чтобы сгруппировать фильтры по категориям.
Какие связи нужно прописать в модели, чтобы отобразить только те категории, которые привязаны к группе фильтров и как использовать это в шаблоне?
Controller:
$filter_groups = FilterGroup::all();
return view('admin.filter-value.create', [
	'filter_groups' => $filter_groups,
]);

Model:
class FilterGroup extends Model 
{
	public function category()
    {
        return $this->belongsTo(Category::class);
    }
}

Blade:
<select id="select_options" data-placeholder="Выбрать группу" class="width300" name="filter_group_id">
	<option value="">Выбрать группу</option>
	@foreach($filter_groups as $filter_group)
		<optgroup label="{{ $filter_group->category->name }}">
			<option value="{{ $filter_group->id }}">{{ $filter_group->name }}</option>
		</optgroup>
	@endforeach
</select>

сейчас группы фильтров отображаются таким образом
62625e53519c1070628649.png
а мне надо чтобы выводилось наименование категории и группы фильтров которые относятся к этой категории
структура таблицы filter_groups:
filter_groups(id, name, category_id)
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
В полученной коллекции сгруппируйте ваши данные по категории:
->groupBy('category.name')

И уже в шаблоне делаешь цикл по группам и внутри цикл внутри группы
@foreach ($groups as $groupName => $filters)
    <optgroup label="{{ $groupName }}">
    @foreach ($filters as $filter)
        <option>{{ $filter->name }}</option>
    @endforeach
    </optgroup>
@endforeach
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы