node.js - TypeORM: memperbarui kolom entitas dengan relasi (@joinColumn) melalui Repository
Saya memiliki entitas berikut:
@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;
}
Jadi, tabel dompet terlihat seperti ini:
-------------------------
id | user_id | address
-------------------------
1 | 1 | 0x12
-------------------------
2 | 43 | 0x10
Dan saya suka memperbarui entitas wallet melalui API Repository. Tapi masalahnya adalah, saya tidak bisa begitu saja:
WalletRepository.save({ address: '0x12', userId: 2 })
Karena Typescript memberi saya kesalahan, bahwa userId seharusnya userEntity, bukan angka. Tapi saya ingin memperbarui kolom relasi. Jadi apakah ada opsi untuk memperbaruinya?
Jawaban #1
Saya menemukan jawaban, bukan di dokumentasi TypeORM, tetapi di posting masalah Github.
Jadi saya perlu dua kolom:
@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;
}
dengan {name: user_id} satu untuk relasi, yang lain untuk pembaruan relasi atau mencari nilai. Hal ini cukup tidak jelas. Jadi jika Anda ingin mencari nilai berdasarkan ID relasi ini, Anda dapat melakukannya melalui properti userID dari Entitas. Tetapi ketika Anda melakukan bagian join, dengan relations[], Anda dapat mengakses objek Anda melalui field user.
