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();
爬出坑了么 ^-^
推荐文章: