Laravel sync 与可选参数的关系

Laravel sync Relation with optional parameters

我使用同步功能来同步 belongsToMany 关系:

$model->products()->sync($productIds);

在 $productIds 数组中有一个带有一些 ID 的平面数组 - 像这样:

$productIds = [1,3,5,6];

我想要的: 主元 table 还有其他列,例如 "created_by" 和 "updated_by".

但是如何在不执行 foreach 循环的情况下将这些字段添加到我的数组中? 有没有更短的方法来做到这一点?

我需要这样的数组:

$productIds = [1 => [
     'created_by' => 1,
     'updated_by' => 1
],3 => [
     'created_by' => 1,
     'updated_by' => 1
],5 => [
     'created_by' => 1,
     'updated_by' => 1
],6 => [
     'created_by' => 1,
     'updated_by' => 1
]];

是的,我知道我可以使用 foreach 来完成,并在遍历数组时添加列。但我想把它做得更短..有没有办法让它更短(也许 laravel)?

将代码示例中 $productIds 中设置的内容传递给 sync().[=12 应该就足够了=]

此方法不仅适用于整数数组。您还可以传递一个数组,其中键是同步 ID,值是应该为给定 ID 设置的数据透视属性数组。

这应该可以解决问题:

$productIds = [
  1 => [
    'created_by' => 1,
    'updated_by' => 1
  ]
  //rest of array
];

$model->products()->sync($productIds);

只需确保您已在关系定义中将这些字段定义为数据透视字段。

为了根据 $productIds 中的 ID 列表生成这样的 table,您可以执行以下操作:

$productIds = array_fill_keys($productIds, array(
  'created_by' => 1,
  'updated_by' => 1,
));