6

我用谷歌搜索了我的手指酸痛,我看不到有人在讨论这个问题,但我怀疑 LaravelssyncWithoutDetaching()方法不会为额外的数据使用任何参数,比如,save()吗?sync()attach()

有人知道吗?在 API 文档中,该方法具有以下参数:

array syncWithoutDetaching(Collection|Model|array $ids)

我无法将现有数据添加到访客和活动之间的关系中。我需要为客人添加状态以及他们参加的活动,可能参加或拒绝。

4

2 回答 2

8

sync()并且syncWithoutDetaching()两者都没有附加值的参数,您必须将附加值作为带有 id 的数组传递。


根据文档

您还可以使用 ID 传递其他中间表值:

$user->roles()->sync([
    1 => ['expires' => true],
    2,
    3
]);


如果你看这里,你会看到它syncWithoutDetaching()只是调用但作为第二个参数sync()传递。false

在你的情况下,它会是这样的:

$event->guests()->syncWithoutDetaching([
    1 => ['attending' => true],
    2 => ['attending' => false]
])
于 2019-03-01T14:50:45.180 回答
0

我认为@remul 答案是最好的,但它需要像我这样访问此页面的人添加。

syncWithoutDetaching()- 只是sync()-这里的缩写。这对应于sync($data, false)

该文档讨论了另一种很棒的方法:

如果您想为每个同步的模型 ID 插入相同的中间表值,您可以使用该syncWithPivotValues 方法

但是文档并没有说该方法接受第三个参数,它只是对应于syncWithoutDetaching().

这里。如果您通过false,则未通过的 ID 将不会分离。

我想这就是问题所在。

于 2022-01-25T16:40:58.690 回答