按相关表计数排序结果-Eloquent ORM


Order Results by Related Table Count - Eloquent ORM

我有一个包含以下项/关系的数据库。

  • "问题"->"答案"->"回答"
  • 每个"回应"都属于一个"行业"

我正在使用以下查询使用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();

效果很好,可以检索标记为公共的问题,与用户的搜索相匹配,并得到相应行业的回复。

问题是,我似乎找不到一种方法来根据具有适当行业ID的回复数量对结果进行排序。我需要计算具有正确行业ID的问题的回复数量,然后根据该数字对问题进行排序。有什么想法吗?

根据相关表排序的唯一方法是联接它,因为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();