私はリーダーボードとleaderboard_scoresテーブルを持っています。 ID、が leaderboard_id、player_id、がスコア:Laravelコレクションの行の位置/順位を取得
leaderboard_scores列を有しています。
はリーダーモデルでは、私はLeaderboardScoreとhasManyのの関係を定義した:
public function scores()
{
return $this->hasMany('App\LeaderboardScore')->orderBy('score', 'desc');
}
今、私は特定のリーダーボードでプレーヤーのランキングを取得したいです。
だからコントローラで、私はplayer_id指定された位置を見つけるために、ループを実行します。それが正常に動作します
$score = $leaderboard->scores;
$scoreCount = $scores->count();
$myScore = $scores->where('player_id', $request->query('player_id'));
if ($myScore) { // If got my score
$myRank = 1;
for ($i = 0; $i < $scoreCount; $i++) {
if ($scores[$i]->player_id == $request->query('player_id')) {
$myRank = $i + 1;
break;
}
}
// Output or do something with $myRank
}
が、私は選手たちと彼らの10万を持っているとき、私は、パフォーマンスが心配です絶えず彼らのランキングを得ている。 forループは良い選択肢ではないようです。
生データベースクエリを使用する必要がありますか?それとも良いアイデアですか?ここで