Вот сценарий
Таблица: Пользователи
id | name | grade | subject ---- | ------|--------|------ 1 | Mark | a | science 2 | Earl | a | english 3 | John | c | english 4 | Mike | d | science 5 | Matt | e | english
То, что я хочу сделать, это заполнить оценки, которые не повторяются или не дублируются, но только для английского предмета
Поэтому он должен просто показать
c e
Я так далеко
контроллер:
$grades = user::select('grade', DB::raw('COUNT(grade) as gradecount')) ->where('subject', 'english') ->groupBy('grade') ->having('gradecount', '=',1) ->get();
лезвие:
@foreach ($grades as $grade) {{ $grade }} @endforeach
Однако этот запрос дает это
a c e
Вы хотите сделать что-то вроде этого:
SELECT grade FROM Users WHERE id IN ( SELECT id FROM Users GROUP BY grade HAVING COUNT( grade ) = 1 ) AND subject = 'english'`
В построителе запросов есть -> whereIn, который вы должны использовать. Слишком ленив, чтобы проверить, но что-то вроде этого может работать.
$ids = user::select('id') ->groupBy('grade') ->having('gradecount', '=',1) ->get(); $grades = user::select('grade') ->whereIn('id', $ids) ->where('subject', 'english') ->get();