2017-08-30 67 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