Результаты заказа по количеству связанных таблиц - Eloquent ORM

0

У меня есть база данных со следующими элементами/отношениями.

  • "вопросы" → "ответы" → "ответы"
  • "ответы" относятся к одной "отрасли",

Я извлекаю данные с помощью 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();

Работает отлично и получает вопросы, которые помечены как общедоступные, соответствуют поиску пользователей и имеют ответы от соответствующей отрасли.

Проблема в том, что я не могу найти способ отсортировать результаты на основе количества ответов с соответствующим идентификатором отрасли. Мне нужно посчитать ответы на вопрос с нужным идентификатором отрасли, а затем отсортировать вопросы по этому номеру. Есть предположения?

Теги:
eloquent
laravel-5

1 ответ

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();
  • 0
    Отлично, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню