GroupBy() 覆盖我的选择语句 Eloquent Laravel

Posted

技术标签:

【中文标题】GroupBy() 覆盖我的选择语句 Eloquent Laravel【英文标题】:GroupBy() overwrite my select statement Eloquent Laravel 【发布时间】:2021-10-26 10:26:56 【问题描述】:

我在这个查询中遇到了这个问题,[sede for location and aule for materials]

$sedi = Sede::with('location', 'aule', 'tipologia_sedi')->join('static_sedi_tipologia', 'static_sedi_tipologia.id', '=', 'sedi.static_sedi_tipologia_id')
        ->leftJoin('aule', 'sedi.id', '=', 'aule.sedi_id')
        ->selectRaw("COUNT(aule.id) as n_aule, sedi.*, static_sedi_tipologia.nome as tipologia")->addSelect($count)
        ->groupBy('sedi');

除了将数据与集合中的关系进行收集之外,我还需要获取更多数据。 在这种情况下,我需要将每个位置的教室数量关联到一个位置。 我注意到在许多尝试之一中 groupBy 语句覆盖了我的 select 语句

COUNT(*) as aggregate

我已经尝试过 groupByRaw()。同样的问题。

在 sql 中查询工作正常

select COUNT(aule.id) as n_aule, sedi.*, static_sedi_tipologia.nome as tipologia
 from `sedi`
 inner join `static_sedi_tipologia`
 on `static_sedi_tipologia`.`id` = `sedi`.`static_sedi_tipologia_id`
 left join `aule`
 on sedi.id = `aule`.`sedi_id`
 GROUP by sedi.id

【问题讨论】:

我认为您忘记使用与查询相同的 ->groupBy('sedi.id') @ApurvBhavsar 已经尝试过了。同样的错误 你试过不加addSelect() 是的,addSelect 是一个错字,我忘记在问题中删除它 【参考方案1】:

使用 Laravel Eloquent 关系功能。

您可以使用 aule、sedi、tipologia_sedi、static_sedi_tipologia 创建关系。

获取aule的计数

Use $query->withCount('aule')

此函数返回与您的外键关联的集合计数。 你可以像$variable->aule_count一样访问

【讨论】:

以上是关于GroupBy() 覆盖我的选择语句 Eloquent Laravel的主要内容,如果未能解决你的问题,请参考以下文章

sql语句中的groupby是啥意思?

使用 Linqdatasource 和 groupby 属性

Django 做一个简单的 group by/count 语句

条件覆盖,路径覆盖,语句覆盖,分支覆盖

oracle查询选择语句——count、sum、order by、group by

使用 Group By 选择无法正常工作