ค้นหาเว็บไซต์

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

บทความที่เกี่ยวข้อง