秩序和Paginate的多态关系

时间:2016-07-27 08:09:53

标签: php laravel model eloquent

我有三个表:postscommentsscores

comments表:

 id | body | user_id | commentable_type | commentable_id | created_at

scores表:

 id | score | user_id | scoreable_type | scoreable_id | created_at

我想获得特定帖子的评论,但这些评论应按其得分(投票)排序!

到目前为止,我有这段代码,但评论并没有按照他们的分数排序!

$limit = 2;
$post = Post::with(['comments' => function ($query) use ($limit) {
    $query->paginate($limit);
}])->find(3);
return $post;

修改 在我的Comment模型课中我有:

public function scores() {
    return $this->morphMany(Score::class, 'scoreable');
  }

我可以获得所有评论,然后在收集中对它们进行排序,但这会浪费资源......

谢谢!

2 个答案:

答案 0 :(得分:1)

尝试添加orderBy以回调内部查询:

$limit = 2;

$post = Post::with([
    'comments.score' => function ($query){
        $query->orderBy('score', 'DESC');
    }, 
    'comments' => function ($query) use ($limit) {
        $query->take($limit);
    }
])->find(3);

return $post;

答案 1 :(得分:0)

$limit = 2;
$post = Post::with(['comments.scores' => function ($query) use ($limit) {
    $query->orderBy('score', 'DESC');->paginate($limit);
}])->find(3);
return $post;