按相关 Table 计数排序结果 - Eloquent ORM
Order Results by Related Table Count - Eloquent ORM
我有一个包含以下内容的数据库 items/relationships。
- "questions" -> "answers" -> "responses"
- "responses"各属于一个"industry"
我正在使用以下查询通过 Eloquent ORM 检索数据:
$questions = Question::where('public', '=', '1')
->where('question', 'like', "%$query%")
->whereHas('responses', function($q) use($industry_id) {
$q->where('industry_id', '=', $industry_id);
})->get();
效果很好,可以检索标记为 public 的问题,与用户的搜索相匹配,并得到相应行业的回复。
问题是,我似乎找不到一种方法来根据具有适当行业 ID 的响应数量对结果进行排序。我需要用正确的行业 ID 计算对问题的回答,然后按该数字对问题进行排序。有什么想法吗?
根据相关 table 排序的唯一方法是加入它,因为 Eloquent 处理关系查询的方式。
$questions = Question::where('public', '=', '1')
->where('question', 'like', "%$query%")
->join('answers as a', 'a.question_id', '=', 'questions.id')
->join('responses as r', 'r.answer_id', '=', 'a.id')
->where('r.industry_id', $industry_id)
->orderByRaw('count(r.id) desc')
->select('questions.*')
// or selectRaw('questions.*, count(r.id) as responses_count')
->groupBy('questions.id')
->get();
我有一个包含以下内容的数据库 items/relationships。
- "questions" -> "answers" -> "responses"
- "responses"各属于一个"industry"
我正在使用以下查询通过 Eloquent ORM 检索数据:
$questions = Question::where('public', '=', '1')
->where('question', 'like', "%$query%")
->whereHas('responses', function($q) use($industry_id) {
$q->where('industry_id', '=', $industry_id);
})->get();
效果很好,可以检索标记为 public 的问题,与用户的搜索相匹配,并得到相应行业的回复。
问题是,我似乎找不到一种方法来根据具有适当行业 ID 的响应数量对结果进行排序。我需要用正确的行业 ID 计算对问题的回答,然后按该数字对问题进行排序。有什么想法吗?
根据相关 table 排序的唯一方法是加入它,因为 Eloquent 处理关系查询的方式。
$questions = Question::where('public', '=', '1')
->where('question', 'like', "%$query%")
->join('answers as a', 'a.question_id', '=', 'questions.id')
->join('responses as r', 'r.answer_id', '=', 'a.id')
->where('r.industry_id', $industry_id)
->orderByRaw('count(r.id) desc')
->select('questions.*')
// or selectRaw('questions.*, count(r.id) as responses_count')
->groupBy('questions.id')
->get();