2013-05-02 65 views
1

在我的Laravel 4应用程序中,我的users表具有votes列。我想找到当前用户的排名。我已经可以通过User::orderBy('votes', 'desc')->take(10)获得前10名用户,但我想在当前用户的排名下方显示该用户的排名。理想情况下,这会去是这样的:获取当前行的等级与Laravel

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

我得到的登录用户,我问他秩假设我的票订购用户表。

有没有人知道我是否有办法通过雄辩做到这一点?

回答

3

虽然仍然有点hacky,你可以通过自定义getter(mutator)在Eloquent中完成。

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

然后,您可以将用户排名作为属性。

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

优雅。尽管类似的hacky解决方案。我会提交一个功能请求,它最好使用数据库的本地功能。 – BenjaminRH 2013-05-03 07:18:49

+0

实际上,'$ this'似乎无法访问范围方法内的模型字段,而普通的方法可以。 – BenjaminRH 2013-05-03 07:35:27

+0

它为我工作。你需要通过'Auth :: user()'来完成,所以你实际上在该用户对象上调用'rank'。我刚刚实际测试过,看起来并没有返回计数。我已经更新了我的答案,而是通过getter使用。我已经测试并可以确认它的工作。 – 2013-05-03 08:38:08

2

喜欢的东西:

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

和显示$currUser通过下面的前10名用户的详细信息?

希望这会有所帮助。

+0

聪明。也hacky。我会留下这个未标记的一天左右,以促使官方解决方案,但它是可行的。谢谢! – BenjaminRH 2013-05-02 20:46:05