【问题标题】:Multiselect Box with Laravel and values from database带有 Laravel 和数据库值的多选框
【发布时间】:2021-08-30 21:48:58
【问题描述】:

我在使用 Laravel 的多选框时遇到困难,特别是从数据库中读取值并显示这些值以便可以在我的编辑视图中进行编辑。

在我的控制器中,在 store 函数中,我使用 implode 函数将正整数保存到数据库字段中。

这里是内爆函数

$prodmulti = implode(',', $prodmulti);

数据库将这些值存储在一个单元格中,例如

prodmulti
1,2,3

这很好用,我得到了单元格,其中填充了很好的值。 问题是当我希望编辑这些值时。 如果我在此单元格中没有保存任何内容,那么正如预期的那样,我在多选框中没有任何内容,这很好。 如果我在数据库单元格中有 1 个数字,那么再次,没问题,我可以在多选框中看到相应的项目。 如果我在数据库单元格中有 2 个或更多项目,则多选框在编辑视图中显示为空白。这就是我遇到问题的地方。

带有多选框的编辑页面的视图刀片如下所示:

<div class="col-lg-8 col-xl-5">
    <div class="form-group">
        <select class="js-select2 form-control" name="prodmulti[]" style="width: 100%;" multiple>
            <option></option>
            @foreach($productcategories as $productcategory)
                <option value="{{ $productcategory->id }}" {{ $user->prodmulti == $productcategory->id ? "selected" : ""}}>
                    {{ $productcategory->name }}
                </option>
            @endforeach
        </select>
    </div>
</div>

控制器中的显示函数看起来像这样,我使用explode将值提取为数组。

$prodmulti = explode(',', $prodmulti);
    
return view(
    'admin.users.edit', 
    compact([
        'user', 
        'roles', 
        'countries', 
        'states', 
        'productcategories', 
        'prodmulti'
    ])
);

如果有帮助,这是我创建的视图,我再次使用这些多选框之一来添加值

<div class="col-lg-8 col-xl-5">
    <div class="form-group">
        <select class="js-select2 form-control" id="prodmulti" name="prodmulti[]" style="width: 100%;" data-placeholder="Choose many.." multiple>
            <option></option>
                @foreach($productcategories as $productcategory)
                    <option value="{{ $productcategory->id }}">
                        {{ $productcategory->name }}
                    </option>
                @endforeach
        </select>
    </div>
</div>

最后,我使用了 select2 多选框,但如果我只使用标准引导多选框并尝试了这两种方法,我会得到相同的结果,我只是喜欢 select2 多选框的外观。

任何帮助将不胜感激, 谢谢, 史蒂夫。

【问题讨论】:

  • $user-&gt;prodmulti 这里存储逗号分隔值?对
  • 嗨@Kamish Paul,是的,这是正确的。一个存储值的例子是
  • 1 例如或 1,2,3 作为另一个示例,甚至为 Null

标签: php html laravel


【解决方案1】:

使用in_array()查看

 $prodmulti = explode(',', $prodmulti);
    
return view('admin.users.edit', compact(['user', 'roles', 'countries', 'states', 'productcategories', 'prodmulti']));

然后在刀片中

<div class="col-lg-8 col-xl-5">
    <div class="form-group">
        <select class="js-select2 form-control" id="prodmulti" name="prodmulti[]" style="width: 100%;" data-placeholder="Choose many.." multiple>
            <option></option>
            @foreach($productcategories as $productcategory)
                <option value="{{ $productcategory->id }}" 
                    {{ in_array($productcategory->id,$prodmulti) ? "selected" : "" }}>
                    {{ $productcategory->name }}
                </option>
            @endforeach
        </select>
    </div>
</div>

【讨论】:

  • 效果很好。我花了几天的时间搜索谷歌,非常感谢。完美运行。谢谢你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2017-03-05
  • 2019-02-26
  • 2021-05-20
  • 2021-02-07
  • 2020-03-15
  • 2019-04-16
相关资源
最近更新 更多