I was testing a lot of approaches and by this moment this code deletes correct entries:
public function upsertGroupedSteps($recipeId): void
{
$groupedSteps = collect($this->steps)->map(function ($step, $index) use ($recipeId){
return [
'recipe_id' => $recipeId,
'step_number' => $index + 1,
'step_text' => trim($step['text']),
'step_image' => $step['image']
? $step['image']->store('guides-images', 'public')
: 'recipes-images/default/default_photo.png',
'created_at' => now(),
'updated_at' => now(),
];
})->toArray();
if ($this->recipeId != 0){
$newStepsNumbers = collect($groupedSteps)->pluck('step_number')->toArray();
// new piece of code 1
$newStepNumbersWithoutReshuffle[0] = 1;
foreach ($newStepsNumbers as $index => $newStepsNumber){
if ($newStepsNumber > 1){
$newStepNumbersWithoutReshuffle[$index] = $newStepsNumber + 1;
}
}
GuideStep::where('recipe_id', $recipeId)
->whereNotIn('step_number', $newStepNumbersWithoutReshuffle)
->delete();
// new piece of code 2
foreach ($groupedSteps as $index => $step){
if ($step['step_number'] != 1){
$groupedSteps[$index]['step_number'] = $step['step_number'] + 1;
}
}
}
GuideStep::upsert(
$groupedSteps,
['recipe_id', 'step_number'],
['step_text', 'step_image']
);
}
Now I have new issue: the step_number
are offset, that is, when deleting step number 2, steps with numbers 1 and 3 remain, now I need to somehow avoid this shift