Я погуглил, и я не вижу, чтобы кто-то обсуждал это, но у меня есть подозрение, что метод Laravels syncWithoutDetaching() не принимает никаких параметров для дополнительных данных, таких как save(), sync() и attach()?
Кто-нибудь знает это? В документации API метод имеет следующие параметры:
array syncWithoutDetaching(Collection|Model|array $ids)
У меня возникли проблемы с добавлением существующих данных в отношения между гостем и событием. Мне нужно добавить статус для гостей и какое мероприятие они посещают, возможно посещают или отклоняют.






sync() и syncWithoutDetaching() оба не имеют параметра для дополнительных значений, вы должны передать дополнительные значения в виде массива с идентификаторами.
Согласно документы:
You may also pass additional intermediate table values with the IDs:
$user->roles()->sync([
1 => ['expires' => true],
2,
3
]);
Если вы посмотрите здесь, вы увидите, что syncWithoutDetaching() просто вызывает sync(), но передает false в качестве второго аргумента.
В вашем случае это будет примерно так:
$event->guests()->syncWithoutDetaching([
1 => ['attending' => true],
2 => ['attending' => false]
])
Я думаю, что ответ @remul — лучший, но он требует дополнений для таких людей, как я, которые попадают на эту страницу.
syncWithoutDetaching() - это просто сокращение от sync() - здесь. Это соответствует sync($data, false)
Документация переговоры о другом замечательном методе:
If you would like to insert the same intermediate table values with each of the synced model IDs, you may use the
syncWithPivotValuesmethod
Но в документации не сказано, что метод принимает третий аргумент, что как раз соответствует логике syncWithoutDetaching().
Смотри здесь.
Если вы пройдете false, непройденные идентификаторы не будут отсоединены.
Я думаю, что вопрос был об этом.