首页 > 解决方案 > 从数组中将多个标签复选框设置为“已选择”

问题描述

为简单的事情苦苦挣扎!

我是 Laravel 8 的新手,并且有许多动态创建的复选框,将它们的值保存到数组中。当我想将以前活动的选项标记为“已选择”时,就会出现我的问题。

问题似乎与 in_array 参数以及我在哪里创建数组..

@php 
    $currentTags = $prop->tags->pluck('id'); 
@endphp   

@foreach($tags as $tag)
    <div class="custom-control custom-switch">
        <input type="checkbox"
            @if(in_array($tag->id, $currentTags)) selected @endif 
            class="custom-control-input" 
            onclick="$(this).val(this.checked ? {{ $tag->id }} : 0)" 
            id="tags[{{ $tag->id }}]" 
            name="tags[{{ $tag->id }}]">
        <label class="custom-control-label" for="tags[{{ $tag->id }}]">{{ $tag->name }}</label>
    </div>
@endforeach 

Error TypeError in_array(): Argument #2 ($haystack) must be of type array, Illuminate\Support\Collection

标签: phplaravel

解决方案


正如@El_Vanja评论的那样:

错误很明显——它需要一个数组,但你给了它一个 Illuminate\Support\Collection 类型的对象。如果您查看该类的文档,您会看到它有一个名为 all 的方法,该方法将集合项作为数组检索。

也应该selected改成checked.

改变这个

@if(in_array($tag->id, $currentTags)) selected @endif

@if(in_array($tag->id, $currentTags->toArray())) checked @endif

或者

@if(in_array($tag->id, $currentTags->all())) checked @endif

推荐阅读