默认情况下如何使用select2和Laravel

时间:2018-08-04 16:36:29

标签: php laravel jquery-select2 jquery-select2-4

我在数据库中有如下表。

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。 但是我的问题是如何使我的选择框处于加载状态的相关类别被选中?

谢谢。

1 个答案:

答案 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