php – Laravel 5:通过pivot同步一个额外的字段

前端之家收集整理的这篇文章主要介绍了php – Laravel 5:通过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);

我已经阅读了manual,但我只是没有看到如何处理这些数组,因为手册中的示例似乎与要填充的额外字段不是多个项目的数组的情况有关:

$user->roles()->sync(array(1 => array('expires' => true)));

我试过用这个answer

合并两个数组:

$syncData = array_combine($allPositionIds,$allCompanyIds);

并得到$syncData:

array:3 [
98 => 129
99 => 130
100 => 131
]

相应地映射到位置id数组和公司ID数组,但如果我尝试

user->positions()->sync($syncData);

我得到一个“sqlSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败” – 我相信它正在尝试将company_id添加为另一个position_user.position_id,但随后它出错为在职位表中不存在.

无论我正在尝试什么,我的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);

猜你在找的Laravel相关文章