问题有很多答案。答案有很多评论和投票。评论有很多票。
我需要通过投票来命令答案。答案表没有投票栏。但是,答案与投票有很多关系。投票表有一个投票栏,投票栏的总和给出了总票数。目前,默认情况下,答案按ID排序。
$questions = Question::with('users', 'answers', 'answers.comments.votes', 'answers.votes')->get();
foreach($questions as $question)
{
print_r($question->question);
foreach($question->answers as $answer)
{
print_r($answer->answer);
$votes = $answer->votes->sum('vote');
print_r($votes);
}
}
答案有很多票和很多评论。评论有很多票。所以,多态关系。
votes table.
id user_id vote votable_id votable_type
1 4 4 1 App\Answer
2 5 3 1 App\Answer
......
这里答案ID 1的投票是7.如何以最大票数订购答案?
答案 0 :(得分:1)
提供关系,以便获得解决方案。根据我的理解,如果您想通过列在嵌套关系中进行排序,可以尝试以下代码:
$questions = Question::with(['users','answers' => function ($query)
{
$query->orderBy('column','Desc')
->with('comments.votes')
->with('votes');
}])->get();
答案 1 :(得分:1)
要检索答案模型实例,按照投票总数排序,请尝试此(未经测试的)代码段
Answer::join('votes', function($join)
{
$join->on('votes.votable_id', '=', 'answer.id');
$join->where('votes.votable_type', '=', 'answer');
})
->groupBy('answer.id')
->orderByRaw('sum(votes.vote)')
->limit(10)
->get();
将来,每次为很多答案计算选票可能都是一种技巧。我想到在答案表中保留一张选票。