Robię układ zgrabiania dla moich użytkowników i oto co mam do tej pory:laravel sortowania kolekcji, a następnie przez kluczowego
Uzyskaj wszystkich użytkowników i sortować je według punktów - to działa dobrze.
$users = User::all();
$users = $users->sortByDesc(function($item){
return $item->points()->sum('amount');
});
Znajdź swoją pozycję w rankingu - to działa dobrze
$position = 0;
foreach($users as $user){
if(Auth::user()->id == $user->id) break;
$position++;
}
Get sobie i użytkownikom powyżej/poniżej mnie - to nie działa. Dostaję losowych użytkowników. Wygląda na to, że kolekcja nie jest już posortowana.
$myRank = new Collection();
if($position > 9){
$myRank->add($users->get($position-1));
$myRank->add($users->get($position));
$myRank->add($users->get($position+1));
return view('rank.show', ['topTen' => $users->take(15), 'myRank' => $myRank]);
}
Proszę mi pomóc z tym jednym albo dać jakąś wskazówkę na innym podejściu (waga dla wielu rekordów)
myślę, że można rozszerzyć klasę kolekcja następnie wywołać ksort na tablicy podkładowej . Bardzo brudny hack choć – peter