通过 TypeORM 中的原始查询批量更新
Bulk update via raw query in TypeORM
如何在 TypeORM 中通过原始查询进行批量更新?
例如,我们有模型 User 和 属性 name
如何在一次交易中更改少数用户的姓名?
typeorm 版本:0.2.7
数据库:postgress
您可以使用 QueryBuilder:
import {getConnection} from "typeorm";
await getConnection()
.createQueryBuilder()
.update(User)
.set({ firstName: "Timber", lastName: "Saw" })
.where("id = :id", { id: 1 })
.execute();
或query()
方法:
getRepository(User).query('UPDATE `users` SET firstName = 'Timber', lastName = 'Saw' WHERE id = 1')
显然,对于批量更新,您可以 .where({ id: In(userIds) })
使用 QueryBuilder 或 WHERE id IN (${userIds.join(',')})
使用原始查询。
要批量更新,可以使用update with set方法,当可以使用orm函数时,总是建议不要使用原始查询。
import {getConnection, In} from "typeorm";
const userIds = [1,2,3];
await getConnection()
.createQueryBuilder()
.update(User)
.set({ isaSeniorCitizen: true })
.where({ id: In(userIds) })
.execute();
你可以这样做
import {getConnection } from "typeorm";
const userIds = [1,2,3];
await getConnection()
.createQueryBuilder()
.update(User)
.set({ isaSeniorCitizen: true })
.whereInIds(userIds)
.execute();
您还可以通过存储库 api 以这种方式更新多行:
await repository.update(
{
id: In([1,2,3,4,5]),
},
{ selected: true },
);
不支持更新具有不同值的多个列。在 Typeorm 仓库中有一个关于此的未解决问题:https://github.com/typeorm/typeorm/issues/7326
@Roman-Pekar 对 Update multiple rows in same query using PostgreSQL 的回答显示了如何使用原始 psql 执行此操作。
另一个“解决方案”是在 postgres 数据库中创建一个存储函数并调用它。在对另一个类似问题的评论之一中,我展示了一个关于如何做到这一点的例子:typeorm efficient bulk update
如何在 TypeORM 中通过原始查询进行批量更新?
例如,我们有模型 User 和 属性 name
如何在一次交易中更改少数用户的姓名?
typeorm 版本:0.2.7
数据库:postgress
您可以使用 QueryBuilder:
import {getConnection} from "typeorm";
await getConnection()
.createQueryBuilder()
.update(User)
.set({ firstName: "Timber", lastName: "Saw" })
.where("id = :id", { id: 1 })
.execute();
或query()
方法:
getRepository(User).query('UPDATE `users` SET firstName = 'Timber', lastName = 'Saw' WHERE id = 1')
显然,对于批量更新,您可以 .where({ id: In(userIds) })
使用 QueryBuilder 或 WHERE id IN (${userIds.join(',')})
使用原始查询。
要批量更新,可以使用update with set方法,当可以使用orm函数时,总是建议不要使用原始查询。
import {getConnection, In} from "typeorm";
const userIds = [1,2,3];
await getConnection()
.createQueryBuilder()
.update(User)
.set({ isaSeniorCitizen: true })
.where({ id: In(userIds) })
.execute();
你可以这样做
import {getConnection } from "typeorm";
const userIds = [1,2,3];
await getConnection()
.createQueryBuilder()
.update(User)
.set({ isaSeniorCitizen: true })
.whereInIds(userIds)
.execute();
您还可以通过存储库 api 以这种方式更新多行:
await repository.update(
{
id: In([1,2,3,4,5]),
},
{ selected: true },
);
不支持更新具有不同值的多个列。在 Typeorm 仓库中有一个关于此的未解决问题:https://github.com/typeorm/typeorm/issues/7326
@Roman-Pekar 对 Update multiple rows in same query using PostgreSQL 的回答显示了如何使用原始 psql 执行此操作。
另一个“解决方案”是在 postgres 数据库中创建一个存储函数并调用它。在对另一个类似问题的评论之一中,我展示了一个关于如何做到这一点的例子:typeorm efficient bulk update