【问题标题】:Order table according to key in foreign key table根据外键表中的键排序表
【发布时间】:2013-10-29 10:20:06
【问题描述】:

我有表 users 和表 points

points 有外键user_id,所以我在User Eloquent 模型中这样做了:

public function points()
{
    return $this->hasMany('Point', 'user_id');
}

所以现在我可以通过以下方式获得一位用户的积分数:

$user->points()->count();

但我想做的是根据所有用户赢得的积分对所有用户进行排序,然后将用户分页每页 20 个。

【问题讨论】:

    标签: mysql laravel eloquent


    【解决方案1】:

    你将从反向关系开始:

    $points = Point::with('User')
                     ->orderBy('votes', 'desc')
                     ->skip($offset)
                     ->take($page_size);    // or use ->paginate();
    

    然后在你看来:

    @foreach($points as $point)
      {{ $point->votes }} | {{ $point->user->name }}
    @endforeach
    

    注意:确保您在 Point 模型中定义了反向关系。

    【讨论】:

    • 我已经定义了反向关系。会试试这个并回复你。谢谢
    • 我没有分数作为数字/列,所以我可以订购它。表points 中的一条记录是一个点。因此,我需要计算这些点数,然后按该计数结果对用户进行排序。希望我不会太困惑
    • 我现在了解您想要实现的目标,但我不清楚您如何在不使用 Fluent 或原始 SQL 的情况下使用 Eloquent 做到这一点。但是从架构的角度来看,您应该考虑将投票计数存储在一个列中,每次给定用户获得投票时,该列的值都会增加。这不仅可以让您使用 Eloquent 实现您想要的功能,而且还可以提高性能,因为不必重新扫描表来计算记录数。
    猜你喜欢
    • 2017-11-04
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多