2017-08-30 30 views
2

代码基于我上一个问题上的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

什么是$ ranklist_id? –

+0

$ ranklist_id是一个GET路由参数,所以本质上它只是我们想要更改内容的排名列表的ID。 (澄清:有几个ranklists。) – Classified

回答

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(); 

} 

希望这有助于!

+0

whereNot函数不断给出列错误,所以我只是将其更改为where('id','!=',$ winner_ranking-> id),而且工作完美。干杯。 – Classified