2013-10-29 21 views
0

我有表users和表points根据外键表中的键的订单表

points有外键user_id,所以我这样做,我User雄辩型号:

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

所以,现在我可以通过执行获得的点数为一个用户:

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

但我想要做的是根据他们赢得的点数排列所有用户,然后为每个用户分页20个页面。

回答

0

你会从反向关系开始:

$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模型的反比关系。

+0

我已经定义了反比关系。将尝试这一点,并回到你身边。谢谢 –

+0

我没有积分作为数字/列,所以我可以订购它。表格中的一个记录是一个点。所以我需要对这些点进行计数,并根据计数结果对用户进行排序。希望我不会太困惑 –

+1

我现在明白你想要达到的目标,我也不清楚你怎么能用Eloquent做到这一点,而不使用Fluent或原始SQL。但是从体系结构的角度来看,您应该考虑将列表中的选票数量存储在一列中,每次给定用户获得投票时,其列表值都会增加。这不仅可以让你用Eloquent实现你想要的东西,而且还可以提高性能,因为不需要重新扫描表来计算记录数。 –