当前位置: 首页 > 面试题库 >

Laravel 5:通过数据透视同步额外的字段

凤修为
2023-03-14
问题内容

用户模型:

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);


 类似资料:
  • 问题内容: 我有一个phone_models,phone_problems和一个phone_model_phone_problem数据透视表。数据透视表有一个额外的“价格”列。 手机型号: 电话问题: 我想做的是获取具有特定问题的特定手机的价格。 这就是我现在的方式,但是我觉得Laravel具有内置的Eloquent功能,我找不到用更简单的方式做到这一点: 这一切都是从他们的中选择特定的模型和问题

  • 我正在制作一个VueJS表单,用户可以在其中编辑一个步骤。一个步骤可以有许多父产品。逻辑是一个步骤可以属于多个产品。我有一个名为products、product_step(透视表)和steps的表。 当用户第一次加载页面时,该数组将填充此stap的父产品。 此阵列将根据用户决定在前端执行的操作进行更改。假设他们希望产品n不再具有此步骤的访问权限。在这种情况下,产品将从阵列中删除。 我面临的问题是,

  • 问题内容: Laravel官方文档具有以下功能: 您还可以将其他数据透视表值与给定的ID相关联: 在后一个示例中,仅添加了一个枢轴行。我不明白的是,如果要同步的行多,如何关联其他数据透视表记录? 提前致谢。 问题答案: 为了与自定义数据透视表一起使用多个模型,您需要: 就是 编辑 回答评论:

  • 我在我的透视表中有一个额外的用户名列,如何将用户名与角色同步? pivot表 我需要在字段中同步用户名 这是更新功能,我在其中添加了 这是我的中的关系 下面是表迁移 这是我在转储请求并验证用户名时得到的结果 转储代码

  • 我需要一些帮助来解决拉威尔的一个问题。我有三张桌子: 颗粒 物种(有树) specie_pellet(这是透视表) specie_颗粒表是颗粒组成的轴心,有一个额外字段,称为percentuale(百分比)。显然,这种关系在物种类中属于遗传性,在颗粒类中详细地说,在颗粒类中属于遗传性: 详细种类类别: 要修改表格,请使用以下表格: 请求传递到路由 最后我拿到了控制器 但是我得到了这个错误:非法的偏

  • A 数据透视表介绍 B.1 什么是数据透视表? 数据透视表是一种可以快速汇总、分析大量数据表格的交互式工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息、分析结果以及摘要数据。使用数据透视表可以深入分析数值数据,以帮助用户发现关键数据,并做出有关企业中关键数据的决策。 数据透视表是针对以下用途特别设计的:以友好的方式,查看大量的数据