如何用TypeORM实现类似指定SQL的字段更新?是否需用QueryBuilder?
在TypeORM中实现字段自减的更新逻辑
要实现你给出的SQL里Column = Column - 30这种基于字段自身值的更新逻辑,TypeORM的Repository.update直接传普通对象的写法做不到,得用以下两种方式:
方法一:使用QueryBuilder(推荐,安全且灵活)
通过QueryBuilder直接构建更新语句,能清晰实现字段自身值的运算,还能通过参数绑定避免SQL注入:
async update(ID: number, value: number) { await this.Repository .createQueryBuilder() .update() .set({ Column: () => `Column - :value` }) .setParameters({ value }) .where("ID = :id", { id: ID }) .execute(); }
方法二:使用Repository.update结合Raw函数
如果不想写完整的QueryBuilder,可用TypeORM的Raw函数插入原生SQL片段,同样能达成需求:
先导入Raw工具:
import { Raw } from "typeorm";
然后修改你的update方法:
async update(ID: number, value: number) { await this.Repository.update( { ID }, // 用参数化写法防止SQL注入,不要直接拼接用户输入的value { Column: Raw((alias) => `${alias} - :value`, { value }) } ); }
是否必须用QueryBuilder?
- 简单的字段自增/自减场景,用
Raw配合Repository.update更简洁; - 复杂更新逻辑(比如多条件、关联表、子查询等),QueryBuilder的可读性和扩展性更强,是更优选择。
内容的提问来源于stack exchange,提问作者Project SH
相关产品推荐
相关产品推荐

