У меня есть база данных со следующими элементами/отношениями.
Я извлекаю данные с помощью 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 обрабатывает реляционные запросы.
$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();