代码基于我前一个问题的Lvkz posted,它解决了我遇到的更大问题。但是,我需要帮助找到一种方法来避免重复和错误的数字序列。
$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();
}
用户A =展示位置:1
用户B =展示位置:2
如果用户B 胜过用户A ,则数字序列将如下所示
用户B =展示位置:1
用户A =展示位置:2
用户C =展示位置:4
用户D =展示位置:5
用户E =展示位置:6
同样是快速记录,问题仍然仍然存在,但如果我将增量更改为1而不是2,则以不同的方式
答案 0 :(得分:1)
这还没有经过测试,但如果我明白你的意思,它应该给你想要的东西:
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();
}
希望这有帮助!