Laravel在编辑视图中显示多选保存的值

时间:2017-01-18 23:16:58

标签: php laravel enums laravel-5.3

我有一个Project模型,它有一个名为project_type的多选字段。我正在使用Select2作为该字段。

我在config/enum.php中设置了这样的枚举:

<?php

return [
    'project_types' => [
        '0' => 'WordPress Brochure Website',
        '1' => 'WordPress WooCommerce Website',
        '2' => 'Drupal Website',
        '3' => 'SEO',
        '4' => 'Branding',
        '5' => 'Bespoke Web App'
    ]
];

?>

在我的create视图中,我有一个包含该字段的表单:

{{ Form::open(array('url' => 'projects')) }}

        <div class="form-group">
            {!! Form::label('Project Type') !!}
            {!! Form::select('project_type[]', Config::get('enums.project_types'), null, ['multiple'=>'multiple']); !!}
        </div>

{{ Form::submit('Create Project', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}

然后在我的控制器中保存多选字段值时,我将数组转换为字符串以存储到数据库中:

public function store(ProjectRequest $request)
    {
        $project_type = $request->input('project_type');
        $project_type = implode(',', $project_type);
        $input = $request->except('project_type');
        $input['project_type'] = $project_type;
        Project::create($input);
        return redirect()->route('projects')->with('message', 'Rate created.');
    }

这将以多个0,1,3的格式存储多选字段。 这样可以保存好但是现在当我想要编辑项目时我需要从数据库中提取值并填充多选字段,这就是我在努力的地方,这就是我在edit中所拥有的内容图。

   {{ Form::model($project, array('route' => array('projects.update', $project->id), 'method' => 'PUT')) }}

                <div class="form-group">
                    {!! Form::label('Project Type') !!}
                    {!! Form::select('project_type[]', Config::get('enums.project_types'), 1, ['multiple'=>'multiple']); !!}
                </div>

                {{ Form::submit('Update Project', array('class' => 'btn btn-primary')) }}

{{ Form::close() }}

目前您可以看到我已将多选字段的默认值硬编码为1,但是有一种方法可以将多选字段的默认值设置为什么存储在db?

1 个答案:

答案 0 :(得分:0)

基本上正是@Jonathon在评论中所说的,我需要将我的内爆字符串转换回数组并将其传递给默认值参数:

<?php
    // explode the saved data back into an array                    
    $project_type = explode(',', $project->project_type);
?>

    <div class="form-group">
        {!! Form::label('Project Type') !!}
        {!! Form::select('project_type[]', Config::get('enums.project_types'), $project_type, ['multiple'=>'multiple']); !!}
    </div>