CakePHP查询构建器中如何对sum聚合结果使用coalesce函数
解决方案
错误原因
你现有写法的问题在于,CakePHP查询构建器默认会将coalesce的第二个参数0识别为数据库字段,会自动拼接表别名前缀,导致生成的SQL出现不存在的字段,触发报错。
正确写法
写法1:使用literal()标记字面量(推荐,兼容性好)
直接用literal()方法标记0为字面量,不需要解析为字段:
$query = $query->select([ 'total' => $query->func()->coalesce( $query->func()->sum('c.get_count'), $query->literal(0) ) ]);
写法2:指定参数类型
通过第三个参数按顺序传入参数类型,告诉构建器第二个参数为整数类型的字面量:
$query = $query->select([ 'total' => $query->func()->coalesce( $query->func()->sum('c.get_count'), 0, ['expression', 'integer'] ) ]);
验证
你可以通过打印SQL语句确认效果是否符合预期:
debug($query->sql());
正常生成的SQL应和你原始的PostgreSQL语句一致:coalesce(sum(c.get_count),0) AS "total"
内容的提问来源于stack exchange,提问作者Niloy Rony
相关产品推荐
相关产品推荐

