Jer*_*L30 3 postgresql typeorm
我想使用 PostgreSQL 更新值并返回指定的列。
到目前为止,我发现更新值然后使用findOne,但它总是会使用两个查询来实现我想要的。
另一种是使用 RAW SQL,UPDATE ... SET ... WHERE ... RETURNING *这似乎是一个很好的解决方案,那么有没有办法使用 TypeORM 来实现这一点UpdateQueryBuilder?
您可以使用createQueryBuilder:
const firstUser = await connection
.getRepository(User)
.createQueryBuilder("user")
.update<User>(User, {firstName: 'new first name'})
.where("user.id = :id", { id: 1 })
.returning(['id', 'email'])
.updateEntity(true)
.execute();
Run Code Online (Sandbox Code Playgroud)
注意:orm 类型中有多种使用createQueryBuilder 的方法,例如:BaseEntity, Repository, EntityManager。
如果使用存储库,这是稍微修改过的答案,并受到诺姆答案的启发:
import {
EntityRepository,
Repository,
} from "typeorm";
import { User } from "../entities/user";
@EntityRepository(User)
export class UserRepository extends Repository<User> {
// ... other functions
updateUser = async (payload: User, id: string): Promise<User> => {
const updatedData = await this.createQueryBuilder("user")
.update<User>(User, { ...payload })
.where("user.id = :id", { id: id })
.returning("*") // returns all the column values
.updateEntity(true)
.execute();
return updatedData.raw[0];
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29546 次 |
| 最近记录: |