TypeORM:通过Repository更新具有关系(@joinColumn)的实体列



我有以下实体:

@Entity({ name: 'user' })
export class UserEntity extends BasicEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({
nullable: false,
unique: true,
})
login: string;
}
@Entity({ name: 'wallet' })
export class WalletEntity extends BasicEntity {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => UserEntity)
@JoinColumn({ name: 'user_id' })
user: UserEntity;
@Column({
name: 'address',
type: 'text',
})
address: string;
}

所以,钱包表看起来是这样的:

-------------------------
id | user_id | address
-------------------------
1  |    1    |   0x12   
-------------------------
2  |    43    |  0x10   

我喜欢通过Repository api更新wallet实体。但问题是,我不能只是:

WalletRepository.save({ address: '0x12', userId: 2 })

因为Typescript给了我一个错误,所以userId应该是userEntity,而不是数字。但我想更新一个关系列。那么有没有更新的选择呢?

我找到了一个答案,不是在TypeORM文档中,而是在发布Github帖子时。

所以我需要两列:

@Entity({ name: 'wallet' })
export class WalletEntity extends BasicEntity {
@PrimaryGeneratedColumn()
id: number;
@ManyToOne(() => UserEntity, (entity: UserEntity) => entity.id)
@JoinColumn({ name: 'user_id' })
user: UserEntity;
@Column({ name: 'user_id', type: 'int' })
userId: number;
@Column({
name: 'address',
type: 'text',
})
address: string;
}

对于{name: user_id},一个用于关系,另一个用于更新关系或查找值。这很不明显。因此,如果你想通过这个关系ID来搜索值,你可以通过实体的userID属性来搜索。但当您在做join部分时,使用relations[],您可以通过user字段访问您的对象。

相关内容

  • 没有找到相关文章

最新更新