2013-05-02 1 views
1

В моем приложении Laravel 4 моя таблица users имеет столбец votes. Я бы хотел найти рейтинг текущего пользователя. Я уже могу получить 10 лучших пользователей с User::orderBy('votes', 'desc')->take(10), но я бы хотел отобразить рейтинг текущего пользователя ниже этого списка. В идеале, это бы что-то вроде:Получение ранга текущей строки с Laravel

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

Я получаю вошедшего в систему пользователя, я прошу его ранга предполагая Приказываю таблицу пользователей по голосам.

Кто-нибудь знает, есть ли способ сделать это с помощью Красноречивого?

ответ

3

Хотя все еще несколько хакерский, вы можете сделать это через пользовательский геттер (мутатор) в Eloquent.

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

Тогда вы можете получить рейтинг пользователей как атрибут.

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

Элегантный. Однако подобное хакерское решение. Я отправлю запрос функции, лучше использовать собственные возможности базы данных. – BenjaminRH

+0

Фактически, '$ this', похоже, не может получить доступ к полям модели внутри методов scope, тогда как обычный метод может. – BenjaminRH

+0

Это работает для меня. Вам нужно сделать это через 'Auth :: user()', так что вы на самом деле вызываете 'rank' на этом объекте пользователей. Я только что протестировал это, и кажется, что он не возвращает счет. Я обновил свой ответ, вместо этого использую его через getter. Я тестировал и могу подтвердить, что он работает. –

2

Что-то вроде:

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

И дисплей $currUser деталями пользователя ниже топ-10 списка?

Надеюсь, это поможет.

+0

Умный. Также хаки. Я оставлю это без отметки в течение дня или около того, чтобы объявить официальное решение, но это выполнимо. Благодаря! – BenjaminRH