简体   繁体   English

Laravel Model将多对多绑定绑定不会填充数据

[英]Laravel Model binding many to many realtionship does not populate data

I have two tables with a many to many relation (Project and Center, the pivot table is ProjectCenter). 我有两个具有多对多关系的表(Project和Center,数据透视表是ProjectCenter)。

These are my models: 这些是我的模型:

Project: 项目:

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();
    }
}

Center: 中央:

class Center extends Model {
    public function projects()
    {
        return $this->belongsToMany('App\Models\Project', 'ProjectCenter', 'IDCenter', 'IDProject');
    }
}

Controller -> edit: 控制器->编辑:

public function edit($id)
    {
        $project = Project::find($id);
        $centerList = Center::lists('Name', 'IDCenter')->toArray();
        return view('project/add', array('centerList' => $centerList))->with('project', $project);
    }

And the view: 和视图:

{!! Form::label('centers_list', 'Center*') !!}
{!! Form::select('centers_list[]', 
    $centerList, 
    null, 
    array(
        'class' => 'form-control ', 
        'required' => 'required', 
        'multiple' => true, 
        'data-placeholder' => 
        'Select a center'
   )
 ) !!}

But I can not select the data already stored previously. 但是我无法选择以前已经存储的数据。

For example: the project 8 (IDProject) has two centers (1 and 2) but the data is not populated in the multiple select: 例如:项目8(IDProject)有两个中心(1和2),但是没有在多重选择中填充数据:

在此处输入图片说明

What am I doing wrong? 我究竟做错了什么?

You all time get same result $centerList = Center::lists('Name', 'IDCenter')->toArray(); 您一直都得到相同的结果$ centerList = Center :: lists('Name','IDCenter')-> toArray(); but you must be get product centers using query with model. 但是你一定要得到使用模型查询产品中心。

$project = Project::with("centers:Name,IDCenter")->find($id);
$centerList = $project->centers->pluck('Name', 'IDCenter')->toArray();

I already solve the problem using a foreach to select the related centers: 我已经使用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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM