node.js - TypeORM: อัปเดตคอลัมน์ของเอนทิตีที่มีความสัมพันธ์ (@joinColumn) ผ่าน Repository
ฉันมีเอนทิตี้ดังต่อไปนี้:
@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
และฉันชอบที่จะอัปเดต wallet เอนทิตีผ่าน Repository API แต่ปัญหาคือ ฉันไม่สามารถแค่:
WalletRepository.save({ address: '0x12', userId: 2 })
เพราะว่า Typescript ให้ข้อผิดพลาดกับฉัน ว่า userId ควรเป็น userEntity ไม่ใช่ตัวเลข แต่ฉันต้องการอัปเดตคอลัมน์ความสัมพันธ์ ดังนั้นมีตัวเลือกใดบ้างที่จะอัปเดตมัน?
คำตอบ #1
ฉันพบคำตอบ ไม่ได้อยู่ในเอกสารของ 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 ของความสัมพันธ์นี้ คุณสามารถทำได้ผ่าน property userID ของ Entity แต่เมื่อตอนที่คุณกำลังทำส่วน join กับ relations[] คุณสามารถเข้าถึง object ของคุณได้ผ่าน field user
