Я использую основной идентификатор сводной таблицы, поэтому он не должен меняться при синхронизации.
Метод sync
в таблице многие ко многим удалит все записи в сводной таблице и заново вставит ее.
Вот мое решение:
$variationUnits = collect($variationUnits);
foreach ($variationUnits as $variationUnit) {
if ($variation->units->contains($variationUnit['unit_id'])) {
$variation->units()->updateExistingPivot($variationUnit['unit_id'], $variationUnit);
}
else {
$variation->units()->attach([$variationUnit]);
}
}
foreach ($variation->units as $variationUnit) {
if (! $variationUnits->pluck('unit_id')->contains($variationUnit->id)) {
$variation->units()->detach($variationUnit->id);
}
}
Есть ли какие-либо встроенные -в функции это сделать? если нет, как я могу улучшить это?