【发布时间】:2021-02-20 21:22:31
【问题描述】:
我正在尝试加入两个表(访问和观察)并提取两列(年+月组合和总数)。我正在使用 php+Laravel 7.3,我正在尝试使用他们的查询生成器。不知何故,我不断收到错误消息:“子查询列太多”。
在 postgres 中,查询如下: select to_char(visits.startdate, 'YYYY-MM') as yearmonth, SUM(observations.number) as total from opinion join visits.id=observations.id where visit_id in (1,2,3,4,5) 和 species_id = 13 按(年月)分组
我试过这个:
$allVisObs = DB::table('visits')
->join('observations', 'visits.id', '=', 'observations.visit_id')
->select(DB::raw("to_char(visits.startdate, 'YYYY-MM') as yearmonth") , DB::raw("SUM(observations.number)"))
->whereIn('visits.id', $allVisits)
->where('observations.species_id', $spid)
->groupBy('yearmonth')->get();
还有这个:
$visObs = DB::table('visits')
->join('observations', 'visits.id', '=', 'observations.visit_id')
->select(DB::raw("to_char(visits.startdate, 'YYYY-MM') as yearmonth") , DB::raw("SUM(observations.number)"))
->whereIn('visits.id', $allVisits)
->where(function ($query) use ($spid) {
$query->where('observations.species_id', '=', $spid);
})
->groupBy('yearmonth')->get();
但两者都给我错误:'子查询有太多列'。我检查了 $allVisits 是一个有效的 id 列表,并且 $spid 也是一个正确的 id。查询运行良好,没有以下行:“->where('observations.species_id, $spid)”。因此,我怀疑 Laravel 以某种方式从其中创建了一个子查询,并尝试在其中添加另一个并失败。 (我尝试切换 wheres,但没有奏效)。我当然可以对整个查询使用 BD::raw,但我想尽可能地坚持使用查询生成器。 任何帮助将不胜感激。
【问题讨论】:
标签: laravel postgresql subquery