Laravel:在不同的行中使用不同的 where 条件进行查询
Posted
技术标签:
【中文标题】Laravel:在不同的行中使用不同的 where 条件进行查询【英文标题】:Laravel: query with a different where condition in a different row 【发布时间】:2021-09-02 19:24:31 【问题描述】:我有一个带有不同值的“配额”列的教室表。一个班,有很多学生。如何以where
条件显示每个row < "quota"
的学生总数?这是表格:。
代码:
Clas-s-room::with('subject.teacher')->with('students')->whereHas('subject', fn ($query) => $query->where('grade', $grade))->withCount('students')->having('students_count', '<', 'quota');
当我使用此代码时,结果为空
当“有”被删除时,结果如下:
想要的结果只显示 3 个教室
【问题讨论】:
它给出了一个错误结果“未找到列:1054 '有子句'中的未知列'学生'” 【参考方案1】:withCount
函数将一个额外的选择列附加到您的查询中。它不使用GROUP BY
,而GROUP BY
通常与having
结合使用。
您实际上不能按选择中添加的子查询进行过滤。不过幸运的是,Laravel 允许您根据使用 has
的相关模型的数量来选择行。此查询也作为子查询添加,但在 where 子句中,因此您也可以在其中使用列名,如下所示:
Clas-s-room::with('subject.teacher')
->with('students')
->whereHas('subject', fn ($query) => $query->where('grade', $grade))
->has('students', '<', \DB::raw('quota'))
->withCount('students');
【讨论】:
它给出了一个错误结果“Column not found: 1054 Unknown column 'students_count' in 'where Clause'” @php 对不起我的错误。我已经更新了 是的,这是完整的查询,谢谢@apokryfos【参考方案2】:您可以使用has
和DB::raw
。
// Simplified version
Clas-s-room::has('students', '<=', DB::raw('clas-s-rooms.quota'))->get();
【讨论】:
以上是关于Laravel:在不同的行中使用不同的 where 条件进行查询的主要内容,如果未能解决你的问题,请参考以下文章