如何在 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();
场景如下
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();