我有以下实体:
@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
字段访问您的对象。