2013-05-02 1 views
1

Dans mon application Laravel 4, ma table users a une colonne votes. J'aimerais trouver le classement de l'utilisateur actuel. Je peux déjà obtenir le top 10 des utilisateurs avec User::orderBy('votes', 'desc')->take(10), mais je voudrais afficher le rang de l'utilisateur actuel en dessous de cette liste. Idéalement, ce serait quelque chose comme:Obtenir le rang de la rangée actuelle avec Laravel

Auth::user()->rank('orderBy', 'votes', 'desc'); 

je suis l'utilisateur connecté, je demande son rang en supposant que je regarde la table des utilisateurs par votes.

Est-ce que quelqu'un sait s'il y a un moyen de le faire avec Eloquent?

Répondre

3

Bien que toujours un peu hacky, vous pouvez le faire via un getter personnalisé (mutateur) dans Eloquent.

public function getRankAttribute() 
{ 
    return $this->newQuery()->where('votes', '>=', $this->votes)->count(); 
} 

Vous pouvez ensuite obtenir le classement des utilisateurs en tant qu'attribut.

$rank = Auth::user()->rank; 
+0

Élégant. Solution hacky similaire cependant. Je vais soumettre une demande de fonctionnalité, il doit être préférable d'utiliser la capacité native de la base de données. – BenjaminRH

+0

En fait, '$ this' ne semble pas pouvoir accéder aux champs du modèle dans les méthodes de portée, alors qu'une méthode normale le permet. – BenjaminRH

+0

Ça marche pour moi. Vous devez le faire via le 'Auth :: user()' de sorte que vous appelez 'rank' sur cet objet utilisateur. Je viens de le tester et il semble qu'il ne retourne pas le nombre. J'ai mis à jour ma réponse pour plutôt être utilisé via un getter. J'ai testé et peux confirmer que cela fonctionne. –

2

Quelque chose comme:

$currUser = DB::table('users')->where('votes','>=',Auth::user()->votes)->count(); 

et affichage $currUser par les détails de l'utilisateur ci-dessous la liste des 10?

Espérons que cela aide.

+0

Clever. Aussi hacky. Je vais laisser ceci non marqué pour un jour ou deux afin d'encourager une solution officielle, mais c'est faisable. Merci! – BenjaminRH

Questions connexes