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->cities->lists('name')->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 如何使用多选填充编辑表单?的主要内容,如果未能解决你的问题,请参考以下文章