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

TypeORM如何通过单次数据库调用返回更新后对象(async/await场景)

解决方案

以下方案均仅触发单次数据库请求,无需额外查询:

方案1:使用QueryBuilder指定returning参数(兼容性最佳)

适用于PostgreSQL、SQL Server、MySQL 8.0.20+等支持RETURNING/OUTPUT子句的主流数据库,可自定义返回的字段:

const updateResult = await dataSource
  .getRepository(User)
  .createQueryBuilder()
  .update(User)
  .set({ username: "newName", age: 26 })
  .where("id = :userId", { userId: 1 })
  .returning("*") // 传入字段数组可只返回指定字段,例如["id", "username"]
  .execute()

// 取出更新后的实体,无匹配记录时为undefined
const updatedEntity = updateResult.raw[0]

方案2:使用TypeORM 0.3.x+内置return参数

0.3及以上版本的TypeORM已经在Repository.update()方法中内置了返回配置,无需手动拼接QueryBuilder:

const updateResult = await UserRepository.update(
  { id: 1 },
  { username: "newName" },
  { returning: "*" }
)

const updatedEntity = updateResult.raw[0]

该方案底层逻辑和方案1完全一致,是框架封装好的语法糖。

特殊情况说明

如果使用的是不支持RETURNING子句的低版本数据库(例如MySQL 5.x),原生SQL层面无法实现单次更新并返回结果,只能接受两次数据库调用的实现方案。

内容的提问来源于stack exchange,提问作者HigoChumbo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:51:02