我有一个一对多关系的用户和引用表。我试图获得基于推荐计数与其他用户相比的用户的排名。我只能根据他们的推荐数量列出用户。
$users = App'User::with('referrals')->get()->sortBy(function($user)
{return $user->referrals->count();});
但是我不知道如何根据引用计数获得排名或排序。
这是我的转诊表:
Schema::create('referrals',function(Blueprint $table){
$table->increments('id');
$table->bigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->bigInteger('referral_id');
$table->timestamps();
});
例如,如果我在db
中有这个user id 1 | 5 referrals
user id 2 | 10 referrals
user id 3 | 1 referral
我想获得用户id 2的秩,即1
试试这个…
$users = App'User::with('referrals')
->get()
->sortBy(function($user) { return $user->referrals->count(); }, SORT_REGULAR, TRUE);
但是请记住,这种排序不会发生在DB中。现在对于排名,
$rank = 0;
$last_count = -1;
foreach($users as $user){
if(count($user->referrals) != $last_count){
$rank++;
$last_count = count($user->referrals);
$user->rank = $rank;
}
else {
$user->rank = $rank;
}
}
此代码将为用户添加排名。相同的推荐计数将是相同的等级。
更新:
如果你想要一个特定的用户的排名,那么你可以这样做。
$rank = 0;
$last_count = -1;
foreach($users as $user){
if(count($user->referrals) != $last_count){
$rank++;
$last_count = count($user->referrals);
}
if($user->id == $specificUserId){
break;
}
}
echo "User's Rank: ".$rank;