Php 如何使用laravel中的旧值填充多选择器选择器

Php 如何使用laravel中的旧值填充多选择器选择器,php,laravel-blade,laravel-5.8,Php,Laravel Blade,Laravel 5.8,我有一个edit.blade.php(Post),其中我有一个多选择器,它应该显示所有类别(Category),并且总是选择哪个类别。经过一些研究,我发现这个方法可以使它工作,但它说in_array()希望参数2是数组,如果给定null <select class="form-control selectpicker" multiple name="category[]" title="Categoría"> @foreach($categories as $category)

我有一个edit.blade.php(Post),其中我有一个多选择器,它应该显示所有类别(Category),并且总是选择哪个类别。经过一些研究,我发现这个方法可以使它工作,但它说in_array()希望参数2是数组,如果给定null

<select class="form-control selectpicker" multiple name="category[]" title="Categoría">
  @foreach($categories as $category)
        <option value="{{ $category->id }}" {{ (in_array($category, old("category")) ? "selected":"") }} >{{ $category->name }}</option>
  @endforeach
</select>

@foreach($categories作为$category)
{{$category->name}
@endforeach
我正在从我的PostController发送一个trait中的所有现有类别(即$categories),并且post拥有的类别位于$post->categories上

编辑:设法得到我想要的,但现在我得到了多个值的副本,有没有办法避免这种情况

<select class="form-control selectpicker" multiple name="category[]" title="Categoría">
                                @foreach ($categories as $category)
                                    @foreach ($post->categories as $postCategory)
                                        @if ($postCategory->id == $category->id)
                                            <option selected value="{{ $category->id }}">{{ $category->name }}</option>
                                        @else
                                            <option value="{{ $category->id }}">{{ $category->name }}</option>
                                        @endif
                                    @endforeach
                                @endforeach
                            </select>

@foreach($categories作为$category)
@foreach($post->categories as$postCategory)
@如果($postCategory->id==$category->id)
{{$category->name}
@否则
{{$category->name}
@恩迪夫
@endforeach
@endforeach

您可以这样使用,对于帖子类别,提取id并签入数组,或者从控制器中,也可以传递帖子类别的数组

  @foreach ($categories as $category)
         <option @if(in_array($category->id, $post->categories->pluck('id')->toArray())) selected 
         @endif value="{{ $category->id }}">{{ $category->name }}</option>                
    @endforeach
@foreach($categories作为$category)
id,$post->categories->PULL('id')->toArray())已选中
@endif value=“{{$category->id}}”>{{{$category->name}
@endforeach

此处的
$category
是对象而不是数组类型。现在不能在数组中使用。让我们尝试制作一个数组类别\u id来进行比较,因为对象不能在\u array中使用\u array in\u array()期望参数2是数组,对象给定您可以使用toArray()$post->categories->pulk('id')->toArray()将对象转换为数组,这将把对象转换为arrayworks perfect,但我不理解代码,如果你能解释一下就好了,谢谢!你可以看看laravel助手,看看助手函数,@if(在数组($category->id,$post->categories->pulk('id')->toArray())这里我使用的是刀片文件中的if条件,所以它的@if和$category->id是类别对象的id,$post->categories->pulk('id')->toArray(),是代码,首先,$post->categories,在object from中为您提供post类别,然后我使用Pull('id')从类别中获取唯一的id,然后使用toArray()将其转换为数组,以便检查类别id是否可用,希望对您有所帮助