我在数据库中有如下表。
resumes
id name phone
categories
id catName
然后我有一个数据透视表来存储多对多关系
category_resume
category_id resume_id
现在,我有一个编辑简历视图,我想在其中显示所有存储的特定简历类别。我将select2插件用于选择框。
到目前为止,我已经尝试过
<select class="select2" multiple="true">
@foreach($categories as $category)
<option {{$category->id == $resume->categories->category_id ? 'selected':''}}>
{{$category->catName}}
</option>
@endforeach
</select>
不幸的是,这给我一个错误,因为$resume->categories
是一个集合,而我无法像$resume->categories->category_id
这样访问它。我需要在这里使用foreach。
但是我的问题是如何使我的选择框处于加载状态的相关类别被选中?
谢谢。
答案 0 :(得分:2)
您无法将$category->id
与$resume->categories->category_id
进行比较的原因是,您说后者将为您提供一个集合,而您只需要检查$category->id
是否存在于选定的数组中即可。 ID。
您应先在控制器中创建数组,然后再将其传递给视图;
类似的东西:
public function show($id)
{
$resume = Resume::findOrFail($id);
$selectedCategories = $resume->categories->pluck('id')->toArray();
return view('resume.view', compact('resume', 'selectedCategories');
}
然后在您看来呢;
<select class="select2" multiple="true">
@foreach($categories as $category)
<option {{in_array($category->id, $selectedCategories) ? 'selected':''}}>
{{$category->catName}}
</option>
@endforeach
</select>
此外,明智的做法是在$categories
不为空之前进行检查。
@if(! empty($categories))
@foreach($categories as $category)
...
@endforeach
@endif