加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 19:34:47 所属栏目:大数据 来源:网络整理
导读:用户模型: public function positions(){ return $this-belongsToMany('AppPosition')-withPivot('company_id')-withTimestamps();} 职位模型: public function users(){ return $this-belongsToMany('AppUser')-withPivot('company_id')-withTimestamps
用户模型:

public function positions()
{
 return $this->belongsToMany('AppPosition')->withPivot('company_id')->withTimestamps();

}

职位模型:

public function users()
{
 return $this->belongsToMany('AppUser')->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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读