【问题标题】:Laravel 5.2 How to populate edit form with multiple select?Laravel 5.2 如何使用多选填充编辑表单?
【发布时间】: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>

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

【问题讨论】:

    标签: laravel jquery-select2


    【解决方案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 不输入文本。
        猜你喜欢
        • 1970-01-01
        • 2014-06-19
        • 1970-01-01
        • 1970-01-01
        • 2016-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-19
        相关资源
        最近更新 更多