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();

爬出坑了么 ^-^

莫等闲,白了少年头,空悲切
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

建议优化一下

A::withCount('b')->get(); 
6个月前 评论
bigbug-gg (楼主) 6个月前

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