我有两个具有多对多关系的表(Project和Center,数据透视表是ProjectCenter)。
这些是我的模特:
项目:
class Project extends Model {
public function centers()
{
return $this->belongsToMany('App\Models\Center', 'ProjectCenter', 'IDProject', 'IDCenter');
}
public function getCenterListAttribute()
{
return $this->centers->lists('IDCenter')->all();
}
}
中心:
class Center extends Model {
public function projects()
{
return $this->belongsToMany('App\Models\Project', 'ProjectCenter', 'IDCenter', 'IDProject');
}
}
控制器->编辑:
public function edit($id)
{
$project = Project::find($id);
$centerList = Center::lists('Name', 'IDCenter')->toArray();
return view('project/add', array('centerList' => $centerList))->with('project', $project);
}
视图:
{!! Form::label('centers_list', 'Center*') !!}
{!! Form::select('centers_list[]',
$centerList,
null,
array(
'class' => 'form-control ',
'required' => 'required',
'multiple' => true,
'data-placeholder' =>
'Select a center'
)
) !!}
但是我无法选择以前已经存储的数据。
例如:项目8(IDProject)有两个中心(1和2),但是没有在多重选择中填充数据:
我在做什么错了?
答案 0 :(得分:0)
您一直都得到相同的结果 $ centerList = Center :: lists('Name','IDCenter')-> toArray(); ,但是您必须使用查询获得产品中心模型。
$project = Project::with("centers:Name,IDCenter")->find($id);
$centerList = $project->centers->pluck('Name', 'IDCenter')->toArray();
答案 1 :(得分:0)
我已经使用foreach选择相关中心来解决该问题:
<select multiple="multiple" name="centers[]" id="centers" class="form-control select2" required="required" data-placeholder="Select a center">
@if($centerList)
@foreach($centerList as $key => $center)
<option value="{{$key}}" {{ (collect($selectedCenters)->contains($key)) ? "selected='selected'" : '' }} >{{$center}}</option>
@endforeach
@endif
</select>