如何在Knex(Postgres)中正确构造含静态$type列的SELECT语句?
解决Knex中带引号别名的静态列查询问题
不用knex.raw()完全可以实现你要的效果,Knex的select()方法支持对象语法来处理这种带特殊字符的别名,完美避开引号被破坏的问题。
正确的写法示例
knex('patrol') .select('*', { '"$type"': 'Patrol' })
另一种等价写法
如果你习惯拆分select调用,也可以这样写:
knex('patrol') .select('*') .select({ '"$type"': 'Patrol' })
为什么这个写法有效?
Knex对select中的对象参数会做特殊处理:
- 对象的键会被直接作为列的别名(保留你写的双引号,不会被转义破坏)
- 对象的值会被当作静态字符串值,自动处理成SQL里的
'Patrol'格式
最终生成的SQL就是你需要的:
select *, 'Patrol' as "$type" from patrol;
之前你碰到引号被破坏的问题,是因为直接把别名和值写在同一个字符串里时,Knex会把整个字符串当作列名来转义,导致引号结构混乱。用对象语法就能清晰区分静态值和带特殊格式的别名,让查询构建器正确解析。
内容的提问来源于stack exchange,提问作者grahamb
相关产品推荐
相关产品推荐

