[英]Laravel 5: syncing an extra field via pivot
用户模型:
public function positions()
{
return $this->belongsToMany('App\Position')->withPivot('company_id')->withTimestamps();
}
职位模型:
public function users()
{
return $this->belongsToMany('App\User')->withPivot('company_id')->withTimestamps();
}
在提交表单时,我有两个数组:
$allPositionIds
array:3 [
0 => 98
1 => 99
2 => 100
]
$allCompanyIds
array:3 [
0 => 129
1 => 130
2 => 131
]
使用
$user->positions()->sync($allPositionIds);
按预期将 position_user 表与用户和相应的位置 ID 同步。
但是我不知道如何填充额外的字段('company_id')
这就是我期望的工作:
$user->positions()->sync([$allPositionIds => ['company_id' => $allCompanyIds]], false);
我已经阅读了手册,但我只是没有看到如何处理这些数组,因为手册中的示例似乎与要填充的额外字段不是多个项目的数组的情况有关:
$user->roles()->sync(array(1 => array('expires' => true)));
我试过使用这个答案
组合两个数组:
$syncData = array_combine($allPositionIds,$allCompanyIds);
并获得 $syncData :
array:3 [
98 => 129
99 => 130
100 => 131
]
哪个映射到位置 id 数组和公司 id 数组,但如果我尝试
user->positions()->sync($syncData);
我收到一个"SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails" - I believe it is trying to add in the company_id as another position_user.position_id but then it errors out as that doesn't exist in the positions table.
无论我现在尝试什么,我的company_id
字段仍未更新/填充。
我做错了什么,如何更新该字段?
你实际上很接近。 所需格式为:
[
98 => ['company_id' => 129],
99 => ['company_id' => 130],
100 => ['company_id' => 131]
]
这应该生成正确的数组:
$extra = array_map(function($companyId){
return ['company_id' => $companyId];
}, $allCompanyIds);
$data = array_combine($allPositionIds, $extra);
$user->positions()->sync($data);
根据@lukasgeiter 的回答,这里有一个示例,可以为数据透视表合并两个额外字段:
$extra = array_map(function($qualityId) use($request){
return ['quality_id' => $qualityId, 'product_id' => $request->product];
}, $arrayQualitiesIds);
$data = array_combine($arrayQualitiesIds, $extra);
dd($data);
输出:
1 => array:2 [▼
"quality_id" => "1"
"product_id" => "5"
]
2 => array:2 [▼
"quality_id" => "2"
"product_id" => "5"
]
3 => array:2 [▼
"quality_id" => "3"
"product_id" => "5"
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.