如何在 Laravel 5.2 中为此查询使用条件

How to use conditional for this query in Laravel 5.2

场景如下

Table:用户

id   | name  | grade  | subject
---- | ------|--------|------
1    | Mark  |   a    |   science
2    | Earl  |   a    |   english
3    | John  |   c    |   english
4    | Mike  |   d    |   science
5    | Matt  |   e    |   english

我想做的是填充 non-repeating 或 non-duplicate 的成绩,但仅针对英语科目

所以它应该只显示

c
e

到此为止

控制器:

$grades = user::select('grade', DB::raw('COUNT(grade) as gradecount'))
->where('subject', 'english')
->groupBy('grade')
->having('gradecount', '=',1)
->get();

blade:

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