【问题标题】:Order Results by Related Table Count - Eloquent ORM按相关表数排序结果 - Eloquent ORM
【发布时间】:2015-03-24 19:40:37
【问题描述】:

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

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

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

【问题讨论】:

    标签: php eloquent laravel-5


    【解决方案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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2014-06-25
      相关资源
      最近更新 更多