首页 > 解决方案 > Laravel 模型绑定多对多关系不会填充数据

问题描述

我有两个具有多对多关系的表(项目和中心,数据透视表是 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),但数据未填充到多选中:

在此处输入图像描述

我究竟做错了什么?

标签: phpmany-to-manylaravel-5.3

解决方案


你总是得到相同的结果$centerList = Center::lists('Name', 'IDCenter')->toArray(); 但是您必须使用带有模型的查询来获得产品中心。

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

推荐阅读