Eloquent 子查询使用聚合函数查询报错解决方法

场景

业务需要统计 主表 A 相关的业务数据,于是采用子查询方式,引入多个业务子表;

这里用B表代替业务子表,实际业务场景不止一个业务子表。

报错的写法

A::query()
->addSelect([
    'pending' => B::query()
        ->whereColumn('a_id', 'a.id')
        ->count(), // 使用了聚合函数
    // 其它的子查询 
])->get();

大概率会报错:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'a.id' in 'where clause' (SQL: select count(*) as aggregate from `b` where `a_id` = `a`.`id`)

解决方法,不使用框架提供的聚合函数,改用原生写法:

A::query()
->addSelect([
    'b_total' => B::query()
        ->selectRaw("COUNT(*)")
        ->whereColumn('a_id', 'a.id')
        ->limit(1),
        // 其它的子查询 
])->get();

爬出坑了么 ^-^

天高地迥,觉宇宙之无穷;兴尽悲来,识盈虚之有数。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

建议优化一下

A::withCount('b')->get(); 
1年前 评论
bigbug-gg (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!