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

时间:2015-03-24 19:40:38

标签: php eloquent laravel-5

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

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

我使用以下查询使用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计算对问题的回答,然后按该数字对问题进行排序。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过相关表进行排序的唯一方法是加入它,因为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();