我想根据答案的数量(一对多关系)对问题进行排序。
orderBy
只适用于列,但在这种情况下,我需要按值排序。
SELECT
answers.question_id,
count(*) AS Counter
FROM answers, questions
WHERE answers.id = questions.id
WHERE question.year > 2014
GROUP BY answers.question_id
ORDER BY `Counter` DESC
我如何在这里使用laravel'
$questions->where('year', '>', 2014)
->paginate(10)
会做pagnation,但不会对结果进行排序。
SortBy不是解决方案,因为那时我需要获得所有结果,对它们进行排序然后只挑选10.这是浪费时间。
答案 0 :(得分:0)
你可以利用collections的力量! 假设您已正确设置模型。
$questions = Question::with('answers')->get()->sortBy(function($question) {
return $question->answers->count();
});
将返回按答案数排序的问题集合。有了这个,您可以像这样手动构建Paginator对象(因为paginate
方法只能用于Eloquent对象):
$questions = new Illuminate\Pagination\Paginator($questions, 10);
// 10 being the number of results per page.
答案 1 :(得分:-1)
你应该看whereHas()
,它允许你在你的关系中加上where子句。
// Retrieve all posts with at least one comment containing words like foo%
$posts = Post::whereHas('comments', function ($query) {
$query->orderBy('name', 'desc');
})->get();
然后,在您的情况下,您可以运行paginate()
而不是get()
来获取LenghtAwarePaginator
对象。