【问题标题】:Getting the current row's rank with Laravel使用 Laravel 获取当前行的排名
【发布时间】:2013-04-26 22:42:46
【问题描述】:

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

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

我得到了登录用户,我要求他的排名,假设我按投票排序用户表。

有人知道我是否可以通过 Eloquent 做到这一点吗?

【问题讨论】:

    标签: laravel laravel-4 eloquent


    【解决方案1】:

    虽然仍然有些 hacky,但您可以通过 Eloquent 中的自定义 getter(mutator)来实现。

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

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

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

    【讨论】:

    • 优雅。虽然类似的hacky解决方案。我会提交一个功能请求,最好使用数据库的原生能力。
    • 实际上,$this 似乎无法访问范围方法内的模型字段,而普通方法可以。
    • 它对我有用。您需要通过Auth::user() 来执行此操作,因此您实际上是在该用户对象上调用rank。我刚刚实际测试过这个,但它似乎没有返回计数。我已经更新了我的答案,改为通过吸气剂使用。我已经测试并且可以确认它有效。
    【解决方案2】:

    类似:

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

    并在前10名列表下方显示$currUser的用户详细信息?

    希望这会有所帮助。

    【讨论】:

    • 聪明。也很hacky。我会在一天左右的时间内不做标记,以鼓励官方解决方案,但它是可行的。谢谢!
    猜你喜欢
    • 2013-05-03
    • 2021-08-12
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多