Code is based on what Lvkz posted on my previous question, and it solved the bigger issue I was having. However I need help finding a way to avoid duplicates and just faulty number sequences.
$winner_ranking = $winner->getRankings()->where('ranklist_id', $ranklist_id)->first();
$loser_ranking = $loser->getRankings()->where('ranklist_id', $ranklist_id)->first();
if ($winner_ranking->placement > $loser_ranking->placement) {
$rankings = ClubRanking::where('placement', '>', $loser_ranking->placement)
->where('ranklist_id', '=', $ranklist_id)
->increment('placement', 2);
$winner_ranking->placement = $loser_ranking->placement;
$winner_ranking->save();
$loser_ranking->placement = $loser_ranking->placement + 1;
$loser_ranking->save();
}
User A = Placement: 1
User B = Placement: 2
If User B wins over User A then the number sequence will look as follows
User B = Placement: 1
User A = Placement: 2
User C = Placement: 4
User D = Placement: 5
User E = Placement: 6
Also a quick note, the issue still persists but in a different way if I were to change the increment to 1 instead of 2.
This hasn't been tested but if I understand what you're after it should give you want you want:
if ($winner_ranking->placement > $loser_ranking->placement) {
$rankings = ClubRanking::whereBetween('placement', [$loser_ranking->placement, $winner_ranking->placement])
->where('id', '!=', $winner_ranking->id)
->where('ranklist_id', '=', $ranklist_id)
->increment('placement');
$winner_ranking->placement = $loser_ranking->placement;
$winner_ranking->save();
}