TypeORM Upsert:如果存在则更新,如果不存在则创建
Upsert(这个术语由两个词组合而成:update和insert)是一种数据库操作,用于更新它已经存在于表中的记录。否则,如果该记录不存在,则插入一个新行。
这篇简洁实用的文章向您展示了如何在 TypeORM 中执行 upsert 操作。您可以使用查询构建器(非常灵活)或save() 方法(这仅在您提供id –主键时有效)。
使用查询生成器
假设我们有一个名为User的实体,声明如下(电子邮件地址是唯一的):
// KindaCode.com
// User entity
import { Entity, PrimaryGeneratedColumn, Column, Unique } from 'typeorm';
@Entity()
@Unique(['email'])
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
name: string;
}
然后我们可以像这样做一个 upsert:
const userRepository = myDataSource.getRepository(User);
userRepository
.createQueryBuilder()
.insert()
.into(User)
.values([
{ email: 'hello@zaimei.com', name: 'Hello' },
{ email: 'goodbye@zaimei.com', name: 'Goodbye' },
])
.orUpdate({ conflict_target: ['email'], overwrite: ['name'] })
.execute();
如果数据库中已存在电子邮件,则将更新该用户的名称。否则,将使用提供的电子邮件地址和姓名创建一个新用户。
使用 save() 方法
使用save() 方法似乎更简洁,但这种方法仅在您提供ids时有效:
const userRepository = myDataSource.getRepository(User);
await userRepository.save([
{ id: 1, email: 'hello@zaimei.com', name: 'Hello Update' },
{ id: 2, email: 'goodbye@zaimei.com', name: 'Goodbye Update' },
]);
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。