如何在knex.first()中结合knex.raw添加计算列?
解决Knex中first()结合raw添加计算列的问题
没问题,我来帮你搞定这个Knex的语法问题!其实first()方法可以直接接受knex.raw()生成的表达式作为参数,和普通列名放在一起就行,这样就能同时获取普通列和你的计算列了。
通用写法(以支持字符串拼接运算符||的数据库为例,比如PostgreSQL)
knex("products") .first( "id", "name", "ingredients", knex.raw('? || id as "image"', ["api/v1/img/"]) )
MySQL适配写法(MySQL用CONCAT函数做字符串拼接)
如果你的项目用的是MySQL,需要把拼接方式换成CONCAT:
knex("products") .first( "id", "name", "ingredients", knex.raw('CONCAT(?, id) as "image"', ["api/v1/img/"]) )
原理说明
first()本质上等价于select(...).limit(1),所以你可以把需要的普通列和knex.raw生成的计算列一起传递给它。- 我们用参数占位符
?来传递常量字符串"api/v1/img/",这比直接拼接字符串更安全,能避免SQL注入风险。 - 最后通过
as "image"给计算列指定别名,这样返回的结果里就会有image字段,值就是"api/v1/img/[id]"的格式。
测试一下的话,当产品id为1时,返回的image字段值就是"api/v1/img/1",完全符合你的需求~
内容的提问来源于stack exchange,提问作者renathy
相关产品推荐
相关产品推荐

