我尝试使用名为data的额外字段在数据透视表中保存数据。
当我保存时,我有这个数组:
[
5 => "files"
4 => "pictures"
3 => "tags"
1 => "thumbs"
]
我的表格如下:
上面显示的ID指的是option_id和要在数据库中命名的字符串。
当我尝试使用这样的同步时:$ project-> options() - > sync($ data);
$ data是上面显示的数组
我得到一个错误,即它试图用"文件"保存option_id。
以下是我如何构建用于同步的数据:
我试图得到你的建议,但不知道如何实现它:
这是我如何构建数组:
foreach($request->input('option_id') as $id) {
$option['option_id'][] = $id;
$option['data'][] = $request->input('data')[$id];
}
$data = array_combine($option['option_id'], $option['data']);
答案 0 :(得分:11)
同步时添加数据透视
您还可以将其他数据透视表值与给定ID相关联:
$user->roles()->sync(array(1 => array('expires' => true)));
在您的示例中,您必须将您的数组更改为如下所示,但我相信这会转换为:
$data = [
5 => [ 'name' => "files" ],
4 => [ 'name' => "pictures" ],
3 => [ 'name' => "tags" ],
1 => [ 'name' => "thumbs" ],
];
$project->options()->sync($data);
我相信您可能还需要修改Project
模型与您的Options
模型的关系:
// File: app/model/Project.php
public function options()
{
return $this->belongsToMany('Option')->withPivot('name');
}
这也在链接到手册页中注明:
默认情况下,只有键才会出现在数据透视对象上。如果数据透视表包含额外属性,则必须在定义关系时指定它们。
<强>更新强>
尝试像这样创建$data
数组:
$data = [];
foreach($request->input('option_id') as $id) {
$data[$id] = [ 'name' => $request->input('data')[$id] ];
}