Laravel:在不同的行中使用不同的 where 条件查询

php*_*php 5 laravel eloquent laravel-8

我有一个带有“配额”列的教室表,该列具有不同的值。在一个班级,有很多学生。如何以where每个学生总数的条件显示教室数据row < "quota"?这是表:桌子.

代码 :

Classroom::with('subject.teacher')->with('students')->whereHas('subject', fn ($query) => $query->where('grade', $grade))->withCount('students')->having('students_count', '<', 'quota');
Run Code Online (Sandbox Code Playgroud)

当我使用此代码时,结果为空

当“拥有”被删除时,结果是: 结果

想要的结果只显示 3 个教室

apo*_*fos 1

该withCount函数会向您的查询附加一个额外的选择列。它不使用GROUP BY通常与 结合使用的which having。

您实际上无法按选择中添加的子查询进行过滤。然而幸运的是 Laravel 允许您根据使用的相关模型的数量来选择行has。此查询也作为子查询添加,但在 where 子句中,因此您也可以在其中使用列名称,如下所示:

Classroom::with('subject.teacher')
    ->with('students')
    ->whereHas('subject', fn ($query) => $query->where('grade', $grade))
    ->has('students', '<', \DB::raw('quota')) 
    ->withCount('students');
Run Code Online (Sandbox Code Playgroud)