I'm using the pivot table primary id so it shouldn't change by syncing.
The sync method in many to many table will delete all records in pivot table and reinsert it.
Here's my solution:
$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);
}
}
Is there any built-in feature to do that? if not, how can I improve it?