You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:56:44