php - 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),但数据未填充到多选中:
我究竟做错了什么?
解决方案
你总是得到相同的结果$centerList = Center::lists('Name', 'IDCenter')->toArray(); 但是您必须使用带有模型的查询来获得产品中心。
$project = Project::with("centers:Name,IDCenter")->find($id);
$centerList = $project->centers->pluck('Name', 'IDCenter')->toArray();
推荐阅读
- camera - hasSystemFeature(PackageManager.FEATURE_CAMERA) 在 Android 上返回 false 吗?
- c++ - 为什么当我通过引用传递形式参数时我的原始变量没有改变?
- json - 使用 Selenium 解析来自 Pushbullet 的最后一条消息
- c# - 源代码更改时 WPF 自动构建和重新加载
- python - 执行 Sql 脚本返回“无”
- python - 为什么对象在 for 循环中加速?
- linux - 带有单独结果的 bash 简单搜索脚本
- r - 我想提高我的 hts 时间序列预测的准确性(MAPE)
- php - 递归循环遍历多维数组并对每个键值做一些事情
- jenkins-pipeline - 来自 AWS ECR 的 Jenkins 管道 Docker 代理