【问题标题】:How to populate a multiple selectpicker with old value in laravel如何在 laravel 中使用旧值填充多个选择器
【发布时间】:2019-07-03 14:45:06
【问题描述】:

我有一个 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>

我正在从我的 PostController 发送一个 trait(即 $categories)中的所有现有类别,并且帖子具有的类别位于 $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>

【问题讨论】:

  • 这里的$category 是对象而非数组类型。您现在不能使用 in_array。让我们尝试制作一个数组 category_id 来比较

标签: php laravel-blade laravel-5.8


【解决方案1】:

您可以像这样使用,对于帖子类别,提取 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

【讨论】:

  • 都是对象不能使用 in_array in_array() 期望参数 2 是数组,给定对象
  • 您可以使用toArray() $post->categories->pluck('id')->toArray() 将对象转换为数组,这会将对象转换为数组
  • 工作完美,但我不明白代码,如果你能解释一下会很酷,谢谢!
  • 你可以查看 laravel 的辅助函数 laravel.com/docs/5.8/helpers 来查看辅助函数 @if(in_array($category->id, $post->categories->pluck('id') ->toArray())) 这里我在刀片文件中使用 if 条件,所以它的 @if 和 $category->id 是您的类别对象的 ID,$post->categories->pluck('id') ->toArray(),是代码,首先,$post->categories,给你对象中的帖子类别,然后我使用 pluck('id') 从类别中获取唯一的 id,然后我使用toArray() 将其转换为数组,以便我可以检查类别ID是否可用,希望对您有所帮助
猜你喜欢
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2014-09-30
  • 2014-01-24
  • 1970-01-01
相关资源
最近更新 更多