79540804

Date: 2025-03-28 07:48:29
Score: 0.5
Natty:
Report link

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

Reasons:
  • Blacklisted phrase (0.5): I need
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • Low reputation (1):
Posted by: Dmytro Shved