我正在为我的用户制作耙子系统,以下是我目前所拥有的:

获取所有用户并按点对其进行排序——效果很好.

$users = User::all();
$users = $users->sortByDesc(function($item){
    return $item->points()->sum('amount');
});

Find your position in ranking - it works fine

$position = 0;
foreach($users as $user){
    if(Auth::user()->id == $user->id) break;
    $position++;
}

Get myself and users above/under me - it doesn't work. I get random users. It looks like the collection is not sorted anymore.

$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]);
}

请帮我解决这个问题,或者给我一些其他方法的提示(对于很多记录来说都是轻量级的)

推荐答案

I think the problem is this:

When you call User::all() you get something like this:

0 => points: 10
1 => points: 50
2 => points: 30
3 => points: 70
4 => points: 20

然后使用sortBy函数,它对集合进行重新排序,但不重置键.所以你最终会得到这样的结果:

3 => points: 70
1 => points: 50
2 => points: 30
4 => points: 20
0 => points: 10

So using position -1, position, and position +1 makes no sense here.

您可以做的是使用VALUES()函数,该函数将重置您的集合的键:

0 => points: 70
1 => points: 50
2 => points: 30
3 => points: 20
4 => points: 10

So I think the following code would work.

$users = User::all();
$users = $users->sortByDesc(function($item){
    return $item->points()->sum('amount');
})->values();

And then get 3 users from positions - 1 to position + 1:

$myRank = $users->splice($position - 1, 3);

Laravel相关问答推荐

为什么Laravel在API请求时返回BadMethodCallException?

当未通过验证的字段是值数组时,Laravel$validator->;validator()方法不会引发异常

为什么使用 created_at 表在迁移错误中创建表?

Laravel Livewire 组件在刷新后不会自动刷新/重新加载

laravel Eloquent 模型更新事件未触发

在Laravel 5中通过ID和所有递归获取记录

Laravel 中间件 except除外规则不起作用

Laravel 验证 - 输入必须是数组中的项目之一

在表单中添加一对多 - Backpack laravel

Laravel vagrant up 不工作 - Errno::EADDRNOTAVAIL

如何利用 StorageFacade 的 Filesystem 类的 glob 方法?

laravel 5.4 指定的key太长,为什么数字191

如何处理 php (Laravel api) 和 javascript (AngularJS) 之间的日期时间

Laravel - DecryptException:'MAC 无效'

Laravel Queue,Beanstalkd vs Database,有什么区别?

在 Laravel 中包含 bootstrap 程序

Laravel Route 模型与关系绑定

在laravel中删除确认

Laravel 集合计数结果

没有Access-Control-Allow-Origin标头 - Laravel