按急切加载的关系计数排序

时间:2016-08-26 08:18:02

标签: php laravel eloquent loading eager

我有类似的东西

class Item extends Model
{   
    ...
    public function likes() {
    return $this->hasMany('like');
}
...

在我的控制器中,我像这样加载这个项目

$items = Item::with([
        ...
        'likes',
        'comments',
        ...
    ])
        ->paginate(10);

我需要得到喜欢的数量并使用这个数字来分页这个列表

$items = Item::with([
        ...
        'likes',
        'comments',
        ...
    ])
        ->orderBy(likes->count())
        ->paginate(10);

,这显然不起作用。有小费吗 ?感谢。

2 个答案:

答案 0 :(得分:4)

只是一个解决方案。但我认为有一个更好的

$items = Item::with([
        ...
        'likes',
        'comments',
        ...
    ])
        ->withCount('likes')
        ->orderBy('likes_count','DESC')
        ->paginate(10);

答案 1 :(得分:0)

试试这个,看看你是否得到了你想要的输出

$items = Item::with([
    ...
 'likes'=>function($query){
 $query->selectRaw('likes.*,count(likes.LikeID) as LikesCount')->groupBy('Item.itemID');
 },
    'comments',
    ...
])
    ->orderBy('likes.Likescount','DESC')
    ->paginate(10);