Laravel 5.2 如何使用多选填充编辑表单?

Posted

技术标签:

【中文标题】Laravel 5.2 如何使用多选填充编辑表单?【英文标题】:Laravel 5.2 How to populate edit form with multiple select? 【发布时间】:2017-03-04 19:37:36 【问题描述】:

我想创建一个包含几个城市的区域。所以我决定使用 jQuery Select2

这是我的创建表单多选

<div class="form-group  $errors->has('cities') ? 'has-error' : '' ">
                    <label>Tentukan Kota</label>
                    <select name="cities[]" class="city form-control" data-placeholder="Pilih Kota" style="width: 100%;" multiple="multiple">
                    @foreach($cities as $city)
                    <option value=" $city->id "> $city->name </option>
                    @endforeach
                    </select>

                </div>

我可以像在文档中一样进行多项选择。

这是我处理显示创建表单的控制器

public function zone_create()

    $cities = City::where('zone_id', null)->get();
    return view('backend.admin.pricings.zone_create', compact('cities'));

关系是一个区域拥有多个城市。

class Zone extends Model

    protected $fillable = [
        'name',    
    ];

    public function cities()
        return $this->hasMany(City::class);    
    

城市属于区域

class City extends Model

    protected $fillable = [
        'zone_id',
        'name',    
    ];

    public function zone()
        return $this->belongsTo(Zone::class);    
    

这是我的编辑方法

public function edit($id)

    $zone = Zone::find($id);
    $cities = City::all();
    return view('backend.admin.pricings.zone_edit', compact('zone', 'cities'));

这是我目前的编辑表单

<div class="form-group  $errors->has('cities') ? 'has-error' : '' ">
                    <label>Tentukan Kota</label>
                    <select name="cities[]" class="city form-control" data-placeholder="Pilih Kota" style="width: 100%;" multiple="multiple">
                    //load option from cities table
//set selected the city belongs to zone
//the other city which don't belong to zone still here for option
                    </select>

                </div>

但是如何在我的编辑表单(多选)中填充城市所属区域?

【问题讨论】:

【参考方案1】:

在我看来就是这样

<select name="cities[]" class="city form-control" data-placeholder="Pilih Kota" style="width: 100%;" multiple="multiple">
                    @foreach($cities as $city)
                        @if(in_array($city->id, $zoneCityIds))
                        <option value=" $city->id " selected="true"> $city->name </option>
                        @else
                        <option value=" $city->id "> $city->name </option>
                        @endif 
                    @endforeach
                    </select>

在我的控制器中像这样

public function zone_edit($id)
    
        $zoneCityIds = [];
        $zone = Zone::find($id);
        $cities = City::all();
        foreach($zone->cities as $zoneCity)
        
            $zoneCityIds[] = $zoneCity->id;
                

        return view('backend.admin.pricings.zone_edit', compact('zone', 'cities', 'zoneCityIds'));
    

其实就是选项标签selected="true"

【讨论】:

【参考方案2】:

对于多个值,只需使用

<div class="form-group">
    !! Form::label('Categories') !!<br />
    !! Form::select('categories[]', $cost_centers, 
        $post->categories->pluck('id')->toArray(), 
        ['class' => 'form-control', 
        'multiple' => 'multiple']) !!
</div>

【讨论】:

【参考方案3】:

在您的编辑功能中,您可以获得该特定区域的所有城市

$zone_cities = implode(',',$zone-&gt;cities-&gt;lists('name')-&gt;toArray());

并在您的视图中传递$zone_cities

return view('backend.admin.pricings.zone_edit', compact('zone', 'cities','zone_cities'));

您必须在视图中使用表单模型绑定 阅读 laravel 集体表单模型绑定 [这里].1

你会像这样打开你的表单

您的编辑表单将是这样的

!! Form::label('cities','Cities: ') !!
!! Form::text('cities',$zone_cities,['class'=>'input','id'=>'cities','aria-required'=>'true','data-seperator'=>',']) !!

【讨论】:

如何在没有表单模型绑定的情况下做到这一点?它应该select 不输入文本。

以上是关于Laravel 5.2 如何使用多选填充编辑表单?的主要内容,如果未能解决你的问题,请参考以下文章

Summernote 编辑器未打开(laravel 5.2)

如何在多选表单 laravel 中选择所有选项?

JS 表单 - 动态填充下拉列表 - 多选,表单填充

在 Laravel 5.3 中使用相同的表单进行创建和编辑

Laravel 5.2:如何保存多个表单字段?

如何在Laravel 5.2中将表单数据作为路由参数传递