Как использовать условно для этого запроса в Laravel 5.2

Вот сценарий

Таблица: Пользователи

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 

Related of "Как использовать условно для этого запроса в Laravel 5.2"

Вы хотите сделать что-то вроде этого:

 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();