当在fastadmin中使用select picker多选保存数据库失败的解决方法

目标:实现一个下拉的多选框,例如下图
图片.png

先说一下实现方法

首先为了我们更方便管理可以在后端先制定好对应的文字方便我们前台调用。

在模型里面定义一个方法如下

public function getMemberlevel()
    {
        return ['0'=>__('注册会员'),'1' => __('一日制会员'), '2' => __('季月制会员'), '3' => __('一年制会员')];
    }

然后再控制器中赋值给变量方便前台调用如下

    public function _initialize()
    {
        parent::_initialize();
        $this->view->assign("memberlevelList", $this->model->getMemberlevel());
    }

前端就可以循环出来对应的东西了,代码如下

    <div class="form-group">
        <label class="control-label col-xs-12 col-sm-2">{:__('Memberlevel')}:</label>
        <div class="col-xs-12 col-sm-8">
                        
            <select  id="c-memberlevel" class="form-control selectpicker" multiple="" name="row[memberlevel][]">
                {foreach name="memberlevelList" item="vo"}
                    <option value="{$key}" {in name="key" value=""}selected{/in}>{$vo}</option>
                {/foreach}
            </select>

        </div>
    </div>

当然上面的语言变量需要您自行再lang文件中定义

那么就是先上述图片的样子了,但是后台保存数据的时候是无法保存到数据库的,因为接受的是数组所以我们还需要使用改造器把数据改造一下如下

在模型中定义

     protected function setMemberlevelAttr($value)
    {
        return is_array($value) ? implode(',', $value) : $value;
    }

这样就可以了,可以多写写。多实践,多做记录,这都是经验