我正在选择中向用户列出类别和子类别。如果类别包含子类别,则禁用父类别才能被选中。在某些情况下,类别没有任何子类别。因此,类别和子类别在同一选择中列出。
在控制器方面,我有两个模型(类别和子类别)。我如何确定选择? (无论是类别还是子类别)
在模型App\Category
中设置关系(假设有模型App\Subcategory
):
public function subcategories()
{
return $this->hasMany('App\Subcategory', 'category_id','id');
}
使用子类别获取类别:
public function getCategories() {
$elements = Category::with('subcategories')->get();
return view('select', compact('elements'));
}
生成视图中的选择:
...
<div class="form-group">
<label for="exampleFormControlSelect1">Example select</label>
<select class="form-control" id="exampleFormControlSelect">
@foreach($elements as $element)
@if(count($element->subcategories) > 0)
<option disabled>{{ $element->title }}</option>
@foreach($element->subcategories as $subcategory)
<option>- {{ $subcategory->title }}</option>
@endforeach
@else
<option>{{ $element->title }}</option>
@endif
@endforeach
</select>
</div>
...
您可以处理这几种不同的方式。
例如,给子类别一个带有sub_category_
前缀的值,并在控制器中检查所选值中是否包含字符串sub_category_
,如下所示。
<option disabled>{{ $element->title }}</option>
@foreach($element->subcategories as $subcategory)
<option value ="sub_category_{{$subcategory->id}}">- {{ $subcategory->title }}</option>
@endforeach
或者您可以在同一个表中同时包含category
和subcategory
,并带有名为parent_id
的额外标志。
所有父类别的值将设置为0,子类别在parent_id
列中具有父类别的ID。然后,您可以简单地存储值,而无需进行任何额外的工作。