Php 拉拉维尔:具有多种关系的历史排名体系

Php 拉拉维尔:具有多种关系的历史排名体系,php,laravel,Php,Laravel,我想显示一个页面,其中用户按排名列出。一个排名可以有多个用户(例如,2个用户可以排在第二位),一个用户也可以有多个排名,因为我想保留一个用户和排名的历史记录 下面是User.php namespace应用程序; 使用Illumb\Foundation\Auth\User作为可验证的; 类用户扩展可验证的 { // ... 公共职能职级(){ 返回$this->belongstomy('App\Rank'); } } 和Rank.php namespace应用程序; 使用Illumb\Datab

我想显示一个页面,其中用户按排名列出。一个排名可以有多个用户(例如,2个用户可以排在第二位),一个用户也可以有多个排名,因为我想保留一个用户和排名的历史记录

下面是
User.php
namespace应用程序;
使用Illumb\Foundation\Auth\User作为可验证的;
类用户扩展可验证的
{
// ...
公共职能职级(){
返回$this->belongstomy('App\Rank');
}
}
Rank.php
namespace应用程序;
使用Illumb\Database\Elount\Model;
类秩扩展模型
{
public$timestamps=false;
公共功能用户(){
返回$this->belongtomany('App\User')->withPivot('created_at');
}
}
我的数据库中还有一个
rank\u user
表,其中包含
id
rank\u id
user\u id
字段中创建

这是我在数据库中记录它的方式:

$user->ranks()->attach($rank_id,['created_at'=>Carbon::now()->addMinutes(105)];
为了按排名列出用户,我指的是当前(最近)排名,我有:

$ranks=Rank::with('users')->get();
例如,对于第1个排名,它给我所有从一开始就排名第一的用户,而不是给我所有当前排名第一的用户


我不知道如何将查询限制在最近的日期。

我问了一位朋友,我们找到了以下解决方案:

我首先必须获得
rank\u user
pivot表中包含的最新日期

$date = DB::table('rank_user')->select('created_at')
                              ->orderBy('created_at', 'desc')
                              ->first();
然后,我可以使用
withPivot()
指定我只需要我们之前找到的最近日期的结果:

$ranks = Rank::with(['users' => function($query) use ($date) {
    $query->wherePivot('created_at', $date->created_at);
}])->get();

瞧!这样,我只会在每个排名中获得最近的用户。

因此,假设一个用户获得排名1,但之后一年内不玩。他们是否还应该与最近获得排名1的其他排名1的人一起返回?嗯,你需要获得所有排名,每个用户的最后一条记录使用创建的位置,我现在还找不到正确的代码,这确实是一个有趣的问题尝试此
$rank=App\rank::with(['users'=>函数($query){$query->latest();}])->get()
@Samsquanch:即使一个用户一年没有玩过游戏,也会在
rank\u user
表中插入一条新的记录,记录今天的日期。因此,如果一个人比第一个没有玩过一年的玩家得到更多的分数,他会打败他。@Achrafkhoudja:你的代码不起作用,因为它列出了所有已经玩过第一个等级的用户,2nd排名等…检查我下面的答案:)