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】:

您可以使用hasDB::raw

// Simplified version
Clas-s-room::has('students', '<=', DB::raw('clas-s-rooms.quota'))->get();

【讨论】:

以上是关于Laravel:在不同的行中使用不同的 where 条件进行查询的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在不同的行中显示 GridView 的列?

如何在 TableView 的行中应用不同的单元格样式

ExtJS 3:如何根据行中的值对不同的行定义不同的操作?

如何在不同的行中添加 alertView 中的按钮?

css在不同的行中排列两个div块[重复]

使用 sqoop 和 hive 将分隔列值获取到不同的行中