首页 > 解决方案 > 更新创建新条目而不是更新它

问题描述

我有一个相当简单的实体模型,其中用户拥有基本信息。如果用户还具有提供程序功能,则将创建与提供程序表的 OneToOne 关系。

我的问题是,如果我更新没有任何提供程序功能的用户,它会按预期工作。更改的字段得到更新,但没有创建新条目。如果用户具有提供程序功能,则用户的所有字段都会更新,并且不会创建新条目。在提供者信息表中,每次更新都会创建一个新条目,并且在用户表中设置新 ID。

@Entity()
export class Users {

    @Column('text', {primary: true})
    uid: string;

    @Column('text', {nullable: true})
    firstName: string;

    @Column('text', {nullable: true})
    lastName: string;

    @Column('text')
    email: string;

    @Column('text')
    password: string;

    @Column('text', {nullable: true})
    role: string;

    @OneToOne(type => Providers, providerData => providerData.user, {cascade: true})
    @JoinColumn()
    providerData: Providers;

    @OneToOne(type => Clients, clientData => clientData.user, {cascade: true})
    @JoinColumn()
    clientData: Clients;

    @Column('bytea', {nullable: true})
    photo: Uint8Array;
}

更新功能:

async update(uid: string, dto: UpdateUserDto): Promise<Users> {
        const userToUpdate = await this.usersRepository.findOne(uid);

        try {
            const user = new Users();
            const provider = new Providers();
            const client = new Clients();

            user.email = dto.email;
            user.firstName = dto.firstName;
            user.lastName = dto.lastName;
            user.photo = dto.photo;
            user.role = dto.role;

            Logger.log(dto.email);

            provider.licensed = dto.licensed;
            provider.notes = dto.notes;
            provider.paymentOptions = dto.paymentOptions;
            provider.speciality = dto.speciality;

            user.providerData = provider;
            user.clientData = client;

            const updatedUser: Users = Object.assign(user, dto);
            updatedUser.uid = uid;

            Logger.log('Updated User with UID: ' + userToUpdate.uid);
            return await this.usersRepository.save(updatedUser);
        } catch (error) {
            Logger.log('Error updating user: ' + error);
        }
    }

我做错了什么或者什么是更好的解决方案?

标签: nestjstypeorm

解决方案


您正在创建一个新用户,而不是更新现有用户。尝试添加这一行

const editedUser = this.usersRepository.merge(userToUpdate ,updatedUser);

然后保存

return this.usersRepository.save(editedUser);

推荐阅读